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 等都不在此文範圍