--- tags: MySQL --- MySQL版本 === * https://hackmd.io/NZDIAydlSPSMywtF4ELN8w ## 序論 :::info :bulb: 昇版本v8.0概述 ::: 1. MySQL 5.6, 5.7, 8.0 的新特性 [#版本說明](#版本說明) 2. 最終支援時間 [#版本維護](#版本維護) 3. MySQL 8.0`sql_mode` [#預設參數](#預設參數) 4. 效能提升多少5.7vs8.0 官方數據 [#基準測試](#基準測試) 5. DB32狀態日期9/9(日) 基準測試/[#基準狀態db-32](#db-32狀態) ----- ## 版本說明 ### MySQL 5.6的新特性 * MySQL 5.6 - 2013/2發布 新功能包括查詢優化器的性能改進、 - InnoDB 中更高的事務吞吐量、 - 新的NoSQL風格的memcached API、 - 對查詢和管理超大表的分區的改進、 - TIMESTAMP正確存儲毫秒的列類型、 - 複製改進以及通過擴展PERFORMANCE_SCHEMA可用數據來實現更好的性能監控。 - InnoDB 存儲引擎還包括對全文搜索的支持和改進的組提交性能。 ### MySQL 5.7的新特性 * MySQL 5.7 - 2015/10 支持RFC 7159 定義的本機JSON數據類型。 - 在线修改Buffer pool的大小。 - InnoDB Cluster - 优化了Performance Schema,其内存使用减少。 - 可设置SELECT操作的超时时长(max_execution_time)。 - InnoDB原生支持分区表,在此之前,是通过ha_partition接口来实现的。 - mysql_install_db被mysqld --initialize代替,用来进行实例的初始化。 ### MySQL 8.0的新特性 * MySQL 8.0 - 2018/04發布,包括NoSQL文檔存儲、原子和崩潰安全DDL語句和JSON擴展語法、新功能,例如JSON表函數、改進的排序和部分更新。 - 重构了INFORMATION_SCHEMA,其中,部分表已重构为基于数据字典的视图,在此之前,其为临时表。 - PERFORMANCE_SCHEMA查询性能提升,其已内置多个索引。 - 资源组(Resource Groups),可用来控制线程的优先级及其能使用的资源,目前,能被管理的资源只有CPU。 - 默认字符集由latin1修改为utf8mb4。 - BLOB, TEXT, GEOMETRY和JSON字段允许设置默认值。 - GROUP BY语句不再隐式排序。 ### 版本維護 * 維護的最終時間(End of support) | Release | General availability | Latest minor version | Latest release | End of support | | --- | --- | --- | --- | --- | | 5.6 | 2013-02-05 | [5.6.51](https://en.wikipedia.org/wiki/MySQL#cite_note-53) | 2021-01-20 | 2021-02 | | 5.7 | 2015-10-21 | [5.7.43](https://dev.mysql.com/doc/relnotes/mysql/5.7/en/) | 2023-07-18 | 2023-10 | | 8.0 | 2018-04-09 | [8.0.34](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/) | 2023-07-18 | 2026-04 | 來源: wikipedia維基(2023/09/13)> [MySQL#Release_history](https://en.wikipedia.org/wiki/MySQL#Release_history) ## 預設參數 ### 預設參數8.0 The default SQL mode in MySQL 8.0 includes these modes: ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, and NO_ENGINE_SUBSTITUTION. 1. [`ONLY_FULL_GROUP_BY`](https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_only_full_group_by) 拒絕選擇列表、 HAVING條件或ORDER BY列表引用既未在GROUP BY子句中命名也不在功能上依賴於列(由列唯一確定)的非 聚合GROUP BY列的查詢。 2. `STRICT_TRANS_TABLES` 3. `NO_ZERO_IN_DATE` 4. `NO_ZERO_DATE` 5. `ERROR_FOR_DIVISION_BY_ZERO` 6. `NO_ENGINE_SUBSTITUTION` 當諸如CREATE TABLE或 之類的語句ALTER TABLE指定禁用或未編譯的存儲引擎時,控制默認存儲引擎的自動替換。默認情況下, `NO_ENGINE_SUBSTITUTION`已啟用。 [設定my.ini(v8.0)] ```code [mysqld] sql_mode= ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION ``` ### 預設自定5.7 [設定my.ini(v5.7)] 設單一項 (目前設置參數) ```code [mysqld] sql_mode=NO_ENGINE_SUBSTITUTION ``` ----- ## 基準測試 ### 基準MySQL 資料來源:[https://www.mysql.com/why-mysql/benchmarks/mysql/](https://www.mysql.com/why-mysql/benchmarks/mysql/) [MySQL基準測試] * MySQL 8.0 Sysbench Benchmark: IO Bound Read Only (Point Selects) IO密集型(I/O-bound): 指的是系統運作大部分的狀況CPU在等I/O的讀寫。 CPU占用率相對的會較低 ![IO Bound Read Only](https://www.mysql.com/common/images/benchmarks/mysql_80_benchmarks_readonly.png) * MySQL 8.0 Sysbench Benchmark: Read Write (update nokey) 讀寫進行測試(不使用索引) ![Read Write (update nokey)](https://www.mysql.com/common/images/benchmarks/mysql_80_benchmarks_readwrite.png) * MySQL 8.0 Sysbench Benchmark: Double Write Buffer, IO Bound Read Write 雙寫入緩衝區、IO 綁定讀寫 ![Read Write (update nokey)](https://www.mysql.com/common/images/benchmarks/mysql_80_dwb.png) ### 基準狀態db-32 * 取值9/9(六)線上運行狀態 來源: psprometheus > Host(db-32) 區間(+8h):2023-09-09 20:00:00 ~ 四小時止 | 軸:Type\\Value | min | max | avg | |:-|-:|-:|-:| | X:Questions | 2347.00 | **3017.00** | 2681.00 | | X:Select Scan | 118.47 | 177.87 | 141.11 | | Y:Connections | 141.00 | 469.00 | 164.00 | | Y:Peak Threads Connected | 141.11 | 469.00 | 163.59 | | Y:Peak Threads Running | 2.00 | **10.00** | 4.73 | | Y:Avg Threads Running | 2.00 | 8.50 | 3.00 | > (軸)X軸 & Y軸 > - X:每秒查詢數(Queries per second) > - Y:在線查詢數(Users) ## 參考來源 * MySQL.com/ 基準測試[MySQL Benchmarks](https://www.mysql.com/why-mysql/benchmarks/mysql/) * dev.mysql.com /[Server SQL Modes 8.0](https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html) * wikipedia(2023/09/13)> 版本特徵[MySQL#Features](https://en.wikipedia.org/wiki/MySQL#Features) * 51cto.com中文知名技术社区 > [MySQL 5.6, 5.7, 8.0的新特性](https://blog.51cto.com/songhl/2306501) ### 相關新聞 * linkedin.com,[2023年數據庫引擎排名](https://www.linkedin.com/pulse/database-engine-ranking-popularity-2023-tamer-khraisha-ph-d-) <!-- ##Hsitory ```code Jill(大J) 2023-09-12下午6:15 因為我剛才有跟Yuri討論完了,他說,我們要整理資料給老闆,由老闆決定 需要整理的資料大綱,關於mysql 5.6, 5.7, 8.0 這三個版本的差異 我先列給你,你可以調整: 1.這三個版本官方的異動 (優化了什麼,解決了什麼,效能提升多少)(官方數據就好) 2.這三個版本官方維護的最終時間 針對剛才mysql 8預設參數的,也要列一個 1. 用預設參數 vs 不用預設參數的差異比對(一樣官方數據就好) 以上都整理完以後,我們來呈報老闆 ``` -->