MYSQL 8 的參數到底 UP DOWN 了那些
- 2019 年 12 月 16 日
- 筆記

mysql8 是早早晚晚都的上的版本,早上會讓開發欣喜,因為很多不支援的功能都開始支援,而尤其是MGR 方面的完善和物理複製的插件等等也是D們期待的。晚上也是有道理的,查詢的速度估計會讓繼續使用MYSQL.5.7的感到欣慰。
mysql 8的安裝上已經和mysql,5.7 在參數的配置上不一樣了,所以還是先搞清楚哪些參數的問題,配置一個較優的mysql 8 比較好,目前mysql 最新的版本是8.019,目前稍微穩定的版本是8.015, 功能有創造性的是8.017.
下面的版本都是基於percona mysql 8.017 對比5.7的配置來說
1 SQL MODE 主要影響影響MySQL支援的SQL語法和它執行的數據驗證檢查,在MYSQL初始化的時候SQL MODE 是一個重要的設置,而MYSQL 5.7 和8.0 在一些配置上是有區別的。
下面是匹配mysql 8.011 以上的版本的SQL MODE
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
下面是mysql 5.78以上的配置
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION
其中我們可以看到這裡兩個版本的區別,僅僅體現在 no_auto_create_user 這個選項上,這個選項的含義是除非指定了身份驗證資訊,否則將阻止GRANT語句自動創建新用戶帳戶。該語句必須指定使用identify BY或使用identify WITH的身份驗證插件的非空密碼。由於MYSQL 8 不能在通過grant 來建立賬戶,必須通過create user來進行,所以這個配置就被MYSQL 8 拿掉了。
如果不改變還使用MYSQL5.7的配置,會造成啟動伺服器報錯

2 innodb_file_format 這個配置也在mysql 8 被去掉了,如果還有這個配置則MYSQL 8 無法啟動並報錯。主要是mysql 8不在支援Antelope
格式,只支援Barracuda
格式,所以這個選項的存在就么有必要了。
3 innodb_undo_logs 在5.7 的配置產生多少UNDO LOGS 的配置,在8.0 已經使用 innodb_rollback_segments 來替代了。這裡有一個公式,可以計算出當前你的設置能支援多少並發的事務,超過這個數字就會出現報錯導致事務無法運行。
(innodb_page_size / 16 / 2) * innodb_rollback_segments *
number of undo tablespaces
4
query_cache_type 這也是在MYSQL 8.0 去掉的功能,在MYSQL 5.X 也很少被使用的一個雞肋的功能。
5 MYSQL 的關於賬戶安全方面的插件,全部失效,需要安裝符合8.0 的安全插件產品。所以相關的配置均不存在,如果配置則報錯。
6 expire_logs_days ,這項配置也已經被取消
7 innodb_undo_tablespaces 這項配置也被取消
8 master-info-file, relay_log_info_file 等也都被取消,相關的資訊被強制保存在數據表中。
在清理了這些配置後,也添加了其他的參與予以替換
1 Caching_sha2_password_rsa_public_key 新的用戶安全插件使用的密碼插件配置
2 Innodb_undo_tablespaces_active 多少存活的undo tablespace 數量
3 binlog_expire_logs_seconds 來設置BINLOG 的過期清理的時間,單位秒
4 innodb_deadlock_detect 檢測死鎖
5innodb_dedicated_server 自動調整 INNODB BUFFER記憶體 log file size, 數據刷新方法。
6 innodb_temp_tablespaces_dir 開始調整臨時表的存放的空間
註:在 innodb_dedicated_server 設置為ON 的情況下,如果不清理原先與innodb_dedicated_server 有關的資訊,則MYSQL 會根據你初始的設置項來進行設置,innodb_dedicated_server 相當於無效。
而其中UNDO LOG 的變化比較大
1 可以動態創建UNDO LOG
2 不在只能創建128個 SEGMENT
3 超過一定數量的UNDO LOG SIZE 會被 innodb_undo_truncate 檢測通過innodb_max_undo_log_size 來控制,超過這個設置就開始自動在線收縮。
另外針對用戶密碼驗證的問題,之前寫過一篇MYSQL 的針對用戶名密碼驗證的文字,這裡就不重複了。
INSTALL
COMPONENT
'file://component_validate_password';
最後在順一遍MYSQL 8 的一些限制
1 一個表最多有 1017 列
2 一個表最多有 64個二級索引
3 一行最大的索引的承受位元組是 3072 或者 767 bytes
4 uft8mb4 的表索引最大承受191個字元,超過無法建立索引,包含前綴索引
5 如果縮減innodb_page_size 到8KB 到 4KB ,以上的部分內容的限制會減半或減75%
6 建立二級索引,單個索引最大的運行列為16列
以上內容僅僅包含基本的不同,關於複製,MGR,以及驗證,AUDIT 等都不在此文範圍