---
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占用率相對的會較低

* MySQL 8.0 Sysbench Benchmark: Read Write (update nokey)
讀寫進行測試(不使用索引)

* MySQL 8.0 Sysbench Benchmark: Double Write Buffer, IO Bound Read Write
雙寫入緩衝區、IO 綁定讀寫

### 基準狀態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 不用預設參數的差異比對(一樣官方數據就好)
以上都整理完以後,我們來呈報老闆
```
-->