Mysq歷史版本與發佈時間

在選擇 Mysql 版本的時候,瞭解一下版本的變遷歷史是有幫助的。對於懷舊也可以享受一下過去的好日子裏是怎麼使用 Mysql的。

 

版本3.23(2001)

 

一般認爲這個版本的發佈是Mysql真正“誕生”的時刻,其開始獲得廣泛使用。在這個版本,Mysql依然只是一個在平面文件(Flat File) 上實現了 SQL 查詢的系統。但一個重要的改進是引入 MyISAM 代替了老舊而且有諸多限制的 ISAM 引擎。InnoDB 引擎也已經可以使用,但沒有包含在默認的二進制發行版中,因爲它太新了。所以如果要使用 InnoDB,必須手工編譯。版本 3.23 還引入了全文索引和複製。複製是 Mysql 成爲互聯網應用的數據庫系統的關鍵特性。

 

 

版本4.0(2003)

 

  • 支持新的語法,比如 UNION 和多表 DELETE 語法。

  • 重寫了複製,在備庫使用了兩個現成來實現複製,避免了之前一個線程所有複製工作的模式下任務切換導致的問題。

  • InnoDB 成爲標準配備,包括了全部的特性:行級鎖、外鍵等。

  • 引入了查詢緩存(自那以後這部門改動不大),同時還支持通過 SSL 進行連接。

 

 

版本4.1(2005)

 

  • 引入了更多新的語法,比如子查詢和 INSERT ON DUPLICATE KEY UPDATE。

  • 開始支持 UTF-8 字符集。

  • 支持新的二進制協議和 prepared 語句。

 

 

版本5.0(2006)

 

  • 這個版本出現了一些“企業級”特性:視圖、觸發器、存儲過程和存儲函數。

  • 老的 ISAM 引擎的代碼被徹底移除,同時引入了新的 Federated 等引擎。

 

 

版本5.1(2008)

 

  • 這是 Sun 收購 MySQL AB 以後發佈的首個版本,研發時間長達五年。

  • 引入了分區、基於行的複製,以及 plugin API(包括可插拔存儲引擎的 API)。

  • 移除了 BerkeyDB 引擎,這是 MySQL 最早的事務存儲引擎。

  • 其他如 Federated 引擎也被放棄。

  • 同時 Oracle 收購的 InnoDB Oy發佈了 InnoDB plugin。

 

 

版本5.5(2010) 

 

性能提升

  • 默認InnoDB plugin引擎。具有提交、回滾和crash恢復功能、ACID兼容。

  • 行級鎖(一致性的非鎖定讀 MVCC)。

  • 表與索引存儲在表空間、表大小無限制。

  • 支持dynamic(primary key緩存內存 避免主鍵查詢引起的IO )與compressed(支持數據及索引壓縮)行格式。

  • InnoDB plugin文件格式Barracuda、支持表壓縮、節約存儲、提供內存命中率、truncate table速度更快。

  • 原InnoDB只有一個UndoSegment,最多支持1023的併發;現在有128個Segments,支持128K個併發(同樣,解決高併發帶來的事務回滾)。

  • Innodb_thread_concurrency默認爲0,線程併發數無限制,可根據具體應用設置最佳值。

  • Innodb_io_capacity可以動態調整刷新髒頁的數量,改善大批量更新時刷新髒頁跟不上導致的性能下降問題。Default:200,跟硬盤的IOPS有關。

  • 充分利用CPU多核處理能力innodb_read_io_threads閾值:1-64innodb_write_io_threads 閾值:1-64根據數據庫的讀寫比靈活設置,充分發揮多CPU、高性能存儲設備的性能,不支持動態加載 。

  • 自適應刷新髒頁

  • 熱數據存活更久

  • buffer pool多實例 :innodb_buffer_pool_instances 參數增加innodb_buffer_pool實例個數,大大降低buffer pool的mutex爭搶過熱情況。

  • Linux上實現異步IO

  • 重新支持組提交

穩定性提升

  • 支持半同步Replication。

  • 增加Relay Log 自我修復功能。

  • Crash recovery。

  • 引入紅-黑樹做插入排序的中間數據結構,時間複雜度大大降低,減少恢復時間。

  • Thread Pool 分組排隊 限流

 

 

版本5.6(2012)

 

  • 默認參數的改變

  • Back_log  排隊隊列

  • 支持全文索引

  • 支持online DDL create,alter,drop

  • 可以在建表時指定表空間位置

      create table external (x int unsigned not null primary key)data directory = '/volumes/external1/data';

  • 新增參數innodb_page_size可以設置page大小

  • 整合了memcached API,可以使用API來直接訪問innodb表,並非SQL(減少SQL解析、查詢優化代價)

  • innodb只讀事務,不需要設置TRX_ID字段,

  • 減少內部數據結構開銷,減少read view

  • 僅僅非只讀事務依然需要TRX_ID

innodb改進點

  • innodb表空間在線遷移(TransportableTablespaces)

  • undo log可獨立出系統表空間

  • redo log最大可增長到512G

  • innodb後臺線程獨立出來

優化器改進

  • ICP

        可以在引擎層直接過濾數據,避免二次回表

        節省BP空間,提高查詢性能

  • BKA

        全稱Batch Key Access:

        SQL通過輔助索引要訪問表數據時候,將大量的隨機訪問放入緩存,交給MRR接口合併爲順序訪問。

  • MRR

        全稱Multi Range Read:

        在BKA算法應用之後,通過MRR接口合併隨機訪問爲順序訪問,再去檢索表數據。

        變大量隨機爲順序訪問。在通過輔助索引檢索大量數據時,性能提升明顯

        磁頭無需來回尋道,page只需讀取一次,且較好利用了innodb線性預讀功能(每次預讀64個連續page)。

  • 統計信息持久化,mysqld重啓後不丟失

  • explain語句支持insert,update,delete,replace語句,並且支持JSON格式

  • 子查詢優化提升。

 

 

版本5.7(2015年)

 

安全性

  • 用戶表 mysql.user 的 plugin字段不允許爲空, 默認值是 mysql_native_password,而不是 mysql_old_password,不再支持舊密碼格式;

  • 增加密碼過期機制,過期後需要修改密碼,否則可能會被禁用,或者進入沙箱模式;

  • 增加密碼過期機制,過期後需要修改密碼,否則可能會被禁用,或者進入沙箱模式;

  • 提供了更爲簡單SSL安全訪問配置,並且默認連接就採用SSL的加密方式。

靈活性

  • MySQL數據庫從5.7.8版本開始,也提供了對JSON的支持。

  • 可以混合存儲結構化數據和非結構化數據,同時擁有關係型數據庫和非關係型數據庫的優點

  • 能夠提供完整的事務支持

  • generated column是MySQL 5.7引入的新特性,所謂generated column,就是數據庫中這一列由其他列計算而得

易用性

  • 在MySQL 5.7 之前,如果用戶輸入了錯誤的SQL語句,按下 ctrl+c ,雖然能夠”結束”SQL語句的運行,但是,也會退出當前會話,MySQL 5.7對這一違反直覺的地方進行了改進,不再退出會話。

  • MySQL 5.7可以explain一個正在運行的SQL,這對於DBA分析運行時間較長的語句將會非常有用。

  • sys schema是MySQL 5.7.7中引入的一個系統庫,包含了一系列視圖、函數和存儲過程, 該項目專注於MySQL的易用性。

    例如:如何查看數據庫中的冗餘索引;如何獲取未使用的索引;如何查看使用全表掃描的SQL語句。

可用性

  • 在線設置 複製的過濾規則 不再需要重啓MySQL,只需要停止SQLthread,修改完成以後,啓動SQLthread。

  • 在線修改buffer pool的大小。

  • Online DDL MySQL 5.7支持重命名索引和修改varchar的大小,這兩項操作在之前的版本中,都需要重建索引或表。

  • 在線開啓GTID ,在之前的版本中,由於不支持在線開啓GTID,用戶如果希望將低版本的數據庫升級到支持GTID的數據庫版本,需要先關閉數據庫,再以GTID模式啓動,所以導致升級起來特別麻煩。

性能

  • 臨時表的性能改進。

        臨時表只在當前會話中可見

        臨時表的生命週期是當前連接(MySQL宕機或重啓,則當前連接結束)

  • 只讀事務性能改進。

MySQL 5.7通過 避免爲只讀事務分配事務ID ,不爲只讀事務分配回滾段,減少鎖競爭等多種方式,優化了只讀事務的開銷,提高了數據庫的整體性能。

  • 加速連接處理。

在MySQL 5.7之前,變量的初始化操作(THD、VIO)都是在連接接收線程裏面完成的,現在將這些工作下發給工作線程,以減少連接接收線程的工作量,提高連接的處理速度。這個優化對那些頻繁建立短連接的應用,將會非常有用。

  • 複製性能的改進 (支持多線程複製(Multi-Threaded Slaves, 簡稱MTS)

MySQL的默認配置是庫級別的並行複製,爲了充分發揮MySQL 5.7的並行複製的功能,我們需要將slave-parallel-type配置成LOGICAL_CLOCK。

  • 支持多源複製(Multi-source replication)

嚴格性改變

  • 默認啓用 STRICT_TRANS_TABLES 模式。

  • 對 ONLY_FULL_GROUP_BY 模式實現了更復雜的特性支持,並且也被默認啓用。

  • 其他被默認啓用的sql mode還有 NO_ENGINE_SUBSTITUTION。

默認參數的改變

  • 默認binlog格式調整爲ROW格式

  • 默認binlog錯誤後的操作調整爲ABORT_SERVER

在先前的選項下(binlog_error_action=IGNORE_ERROR),如果一個錯誤發生,導致無法寫入binlog,mysql-server會在錯誤日誌中記錄錯誤並強制關閉binlog功能。這會使mysql-server在不記錄binlog的模式下繼續運行,導致從庫無法繼續獲取到主庫的binlog。

  • 默認開啓mysql崩潰時的binlog安全。

  • 默認調低slave_net_timeout。

安裝不同

  • mysql_install_db已經不再推薦使用了,建議改成mysqld --initialize 完成實例初始化。如果 datadir 指向的目標目錄下已經有數據文件,則會有[ERROR] Aborting;

  • 在初始化時如果加上 --initial-insecure,則會創建空密碼的 root@localhost 賬號,否則會創建帶密碼的 root@localhost 賬號,密碼直接寫在 log-error 日誌文件中;新用戶登入後需要立刻修改密碼,否則無法繼續後續的工作。

轉自:

https://www.cc1021.com/article/134.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章