首頁 >資料庫 >mysql教程 >看看MySQL 5.6, 5.7, 8.0的新功能!

看看MySQL 5.6, 5.7, 8.0的新功能!

藏色散人
藏色散人轉載
2020-04-11 11:47:562471瀏覽

對於MySQL的歷史,相信很多人早已耳熟能詳,這裡就不要贅述。以下僅從產品特性的角度來整理其發展過程中的里程碑事件。

推薦:《mysql影片教學

1995年,MySQL 1.0發布,僅供內部使用。

1996年,MySQL 3.11.1發布,直接跳過了MySQL 2.x版本。

1999年,MySQL AB公司成立。同年,發布MySQL 3.23,該版本整合了Berkeley DB儲存引擎。該引擎由Sleepycat公司開發,支援事務。在整合此引擎的過程中,對原始碼進行了改造,為後續可插拔式儲存引擎架構奠定了基礎。

2000年,ISAM升級為MyISAM儲存引擎。同年,MySQL基於GPL協定開放原始碼。

2002年,MySQL 4.0發布,整合了後來大名鼎鼎的InnoDB儲存引擎。該引擎由Innobase公司開發,支援事務,支援行級鎖,適用於OLTP等高並發場景。

2005年,MySQL 5.0發布,開始支援遊標,預存程序,觸發器,視圖,XA事務等功能。同年,Oracle收購Innobase公司。

2008年,Sun以10億美金收購MySQL AB。同年,發布MySQL 5.1,其開始支援定時器(Event scheduler),分區,基於行的複製等特性。

2009年,Oracle以74億美金收購Sun公司。

2010年,MySQL 5.5發布,其包含以下重要功能及更新。

● InnoDB取代MyISAM成為MySQL預設的儲存引擎。

● 多核心擴展,能更充分地使用多核心CPU。

● InnoDB的效能提升,包括支援索引的快速創建,表壓縮,I/O子系統的效能提升,PURGE操作從主執行緒中剝離出來,Buffer Pool可拆分為多個Instances。

● 半同步複製。

● 引入utf8mb4字元集,可用來儲存emoji表情。

● 引入metadata locks(元資料鎖)。

● 分區表的增強,新增兩個分區類型:RANGE COLUMNS和LIST COLUMNS。

● MySQL企業版引入執行緒池。

● 可設定IO讀寫執行緒的數量(innodb_read_io_threads,innodb_write_io_threads)。在此之前,其數量為1,且不可配置。

● 引入innodb_io_capacity選項,用於控制髒頁刷新的數量。

2013年,MySQL 5.6發布,其包含以下重要功能及更新。

● GTID複製。

● 無損複製。

● 延遲複製。

● 基於庫層級的平行複製。

● mysqlbinlog可遠端備份binlog。

● 對TIME, DATETIME和TIMESTAMP進行了重構,可支援小數秒。 DATETIME的空間需求也從之前的8個位元組減少到5個位元組。

● Online DDL。 ALTER操作不再阻塞DML。

● 可傳輸表空間(transportable tablespaces)。

● 統計資訊的持久化。避免主從之間或資料庫重新啟動後,同一個SQL的執行計劃有差異。

● 全文索引。

● InnoDB Memcached plugin。

● EXPLAIN可用來查看DELETE,INSERT,REPLACE,UPDATE等DML作業的執行計劃,在此之前,只支援SELECT作業。

● 分區表的增強,包括最大可用分區數增加至8192,支援分區和非分區表之間的資料交換,操作時明確指定分區。

● Redo Log總大小的限制從先前的4G擴展至512G。

● Undo Log可保存在獨立表空間中,因其是隨機IO,更適合放到SSD中。但仍不支援空間的自動回收。

● 可dump與load Buffer pool的狀態,避免資料庫重新啟動後需要較長的預熱時間。

● InnoDB內部的效能提升,包括分割kernel mutex,引入獨立的刷新線程,可設定多個purge線程。

● 優化器效能提升,引入了ICP,MRR,BKA等特性,針對子查詢進行了最佳化。

可以說,MySQL 5.6是MySQL史上一個里程碑式的版本,這也是目前生產上應用得最廣泛的版本。

 

2015年,MySQL 5.7發布,其包含以下重要功能及更新。

● 群組複製

● InnoDB Cluster

● 多重來源複製

● 增強半同步(AFTER_SYNC)

● 基於WRITESET的並行複製。

● 線上開啟GTID複製。

● 線上設定複製過濾規則。

● 在線上修改Buffer pool的大小。

● 在同一長度編碼位元組內,修改VARCHAR的大小只需修改表的元數據,無需建立臨時表。

● 可設定NUMA架構的記憶體分配策略(innodb_numa_interleave)。

● 透明頁壓縮(Transparent Page Compression)。

● UNDO表空間的自動回收。

● 查詢最佳化器的重構與增強。

● 可查看目前正在執行的SQL的執行計畫(EXPLAIN FOR CONNECTION)。

● 引入了查詢改寫插件(Query Rewrite Plugin),可在服務端對查詢進行改寫。

● EXPLAIN FORMAT=JSON會顯示成本訊息,這樣可直觀的比較兩種執行計畫的優劣。

● 引入了虛擬列,類似Oracle中的函數索引。

● 新執行個體不再預設建立test資料庫及匿名使用者。

● 引入ALTER USER指令,可用來修改使用者密碼,密碼的過期策略,及鎖定使用者等。

● mysql.user表中儲存密碼的欄位從password修改為authentication_string。

● 表空間加密。

● 優化了Performance Schema,其記憶體使用減少。

● Performance Schema引入了眾多instrumentation。常用的有Memory usage instrumentation,可用來查看MySQL的記憶體使用情況,Metadata Locking Instrumentation,可用來查看MDL的持有情況,Stage Progress instrumentation,可用來查看Online DDL的進度。

● 相同觸發事件(INSERT,DELETE,UPDATE),相同觸發時間(BEFORE,AFTER),允許建立多個觸發器。在此之前,只允許建立一個觸發器。

● InnoDB原生支援分區表,在此之前,是透過ha_partition介面來實現的。

● 分區表支援可傳輸表空間特性。

● 整合了SYS資料庫,簡化了MySQL的管理及異常問題的定位。

● 原生支援JSON類型,並引入了眾多JSON函數。

● 引入了新的邏輯備份工具-mysqlpump,支援表格層級的多執行緒備份。

● 引進了新的客戶端工具-mysqlsh,其支援三種語言:JavaScript, Python and SQL。兩種API:X DevAPI,AdminAPI,其中,前者可將MySQL作為文件型資料庫進行操作,後者用於管理InnoDB Cluster。

● mysql_install_db被mysqld --initialize代替,用來進行實例的初始化。

● 原生支援systemd。

● 引入了super_read_only選項。

● 可設定SELECT操作的逾時時長(max_execution_time)。

● 可透過SHUTDOWN指令關閉MySQL實例。

● 引入了innodb_deadlock_detect選項,在高並發場景下,可使用此選項來關閉死鎖偵測。

● 引入了Optimizer Hints,可在語句層級控制最佳化器的行為,如是否開啟ICP,MRR等,在此之前,只有Index Hints。

● GIS的增強,包括使用Boost.Geometry取代先前的GIS演算法,InnoDB開始支援空間索引。

 

2018年,MySQL 8.0發布,其包含以下重要功能及更新。

● 引入了原生的,基於InnoDB的資料字典。資料字典表位於mysql函式庫中,對使用者不可見,同mysql函式庫的其它系統表一樣,保存在資料目錄下的mysql.ibd檔中。不再置於mysql目錄下。

● Atomic DDL。

● 重構了INFORMATION_SCHEMA,其中,部分錶已重構為基於資料字典的視圖,在此之前,其為臨時表。

● PERFORMANCE_SCHEMA查詢效能提升,其已內建多個索引。

● 不可見索引(Invisible index)。

● 降序索引。

● 直方圖。

● 公用表表達式(Common table expressions)。

● 視窗函數(Window functions)。

● 角色(Role)。

● 資源組(Resource Groups),可用來控制執行緒的優先權及其能使用的資源,目前,能被管理的資源只有CPU。

● 引入了innodb_dedicated_server選項,可基於伺服器的記憶體來動態設定innodb_buffer_pool_size,innodb_log_file_size和innodb_flush_method。

● 快速加列(ALGORITHM=INSTANT)。

● JSON欄位的部分更新(JSON Partial Updates)。

● 自增主鍵的持久化。

● 可持久化全域變數(SET PERSIST)。

● 預設字元集由latin1修改為utf8mb4。

● 預設開啟UNDO表空間,且支援線上調整數量(innodb_undo_tablespaces)。在MySQL 5.7中,預設不開啟,若要開啟,只能初始化時設定。

● 備份鎖定。

● Redo Log的最佳化,包含允許多個使用者執行緒並發寫入log buffer,可動態修改innodb_log_buffer_size的大小。

● 預設的認證外掛程式由mysql_native_password改為caching_sha2_password。

● 預設的記憶體臨時表由MEMORY引擎變更為TempTable引擎,相較於前者,後者支援以變長方式儲存VARCHAR,VARBINARY等變長欄位。從MySQL 8.0.13開始,TempTable引擎支援BLOB欄位。

● Grant不再隱式創建使用者。

● SELECT ... FOR SHARE和SELECT ... FOR UPDATE語句中引入NOWAIT和SKIP LOCKED選項,解決電商場景熱點行問題。

● 正規表示式的增強,新增了4個相關函數,REGEXP_INSTR(),REGEXP_LIKE(),REGEXP_REPLACE(),REGEXP_SUBSTR()。

● 查詢最佳化器在製定執行計畫時,會考慮資料是否在Buffer Pool中。而在此之前,是假設資料都在磁碟中。

● ha_partition介面從程式碼層移除,如果要使用分區表,只能使用InnoDB儲存引擎。

● 引入了更多細微的權限來取代SUPER權限,現在授予SUPER權限會提示warning。

● GROUP BY語句不再隱含排序。

● MySQL 5.7引入的表空間加密特性可對Redo Log和Undo Log進行加密。

● information_schema中的innodb_locks和innodb_lock_waits表被移除,取代的是performance_schema中的data_locks和data_lock_waits表。

● 引入performance_schema.variables_info表,記錄了參數的來源及修改情況。

● 增加了對於客戶端報錯資訊的統計(performance_schema.events_errors_summary_xxx)。

● 可統計查詢的回應時間分佈(call sys.ps_statement_avg_latency_histogram())。

● 支援直接修改列名(ALTER TABLE ... RENAME COLUMN old_name TO new_name)。

● 使用者密碼可設定重試原則(Reuse Policy)。

● 移除PASSWORD()函數。這就表示無法透過「SET PASSWORD ... = PASSWORD('auth_string') 」指令修改使用者密碼。

● 程式碼層移除Query Cache模組,故Query Cache相關的變數與運算皆不再支援。

● BLOB, TEXT, GEOMETRY和JSON欄位允許設定預設值。

● 可透過RESTART指令重啟MySQL實例。

 

要注意的是,上述的發布,一般指的是GA版本。

 

最後,看看下面這個表格,表中給出了最近幾個大版本的發佈時間,及截止到本書出版,其最新的小版本及其發佈時間。

看看MySQL 5.6, 5.7, 8.0的新功能!

https://en.wikipedia.org/wiki/MySQL#Release_history

從表格中的資料來看,

1. 大概每3年會發布一個大的版本。

2. 產品的支援週期一般是8年。

3. 以為MySQL 5.5是老古董了,但官方仍在不斷更新。

原文網址:https://www.cnblogs.com/ivictor/p/9807284.html

以上是看看MySQL 5.6, 5.7, 8.0的新功能!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除