原创 马听 MySQL数据库联盟
目前,可以在Oracle官網查看到MySQ 8.4新增的內容:
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/mysql-nutshell.html
這裡選一些重點變化項來聊一下。
1 MySQL密碼認證變更
從 MySQL 8.4.0 開始,mysql_native_password 認證外掛預設不再啟用。
若要啟用,需要在MySQL啟動的時候,加入–mysql-native-password=ON 參數;
或在設定檔中設定 mysql_native_password=ON。
2 一些系統變數預設值變更
MySQL 8.4,也調整了與 InnoDB 儲存引擎相關的多個伺服器系統變數的預設值,例如:
innodb_io_capacity
預設值改成了10000,之前是200。
控制每秒可用於 InnoDB 後台任務的 I/O 數。
例如緩衝池中的頁面刷新,或是合併來自更改緩衝區的資料。
如果是 SSD,可設定 5000 以上。
現在線上MySQL,基本上都是SSD,所以預設值設定成10000也合理。
innodb_buffer_pool_instances
InnoDB 緩衝池的區域數,將緩衝池劃分多個區域,可以減少不同執行緒讀取和寫入快取頁時的爭用,可提高並發性。
之前預設值是8,如果innodb_buffer_pool_size< 1G,則為1。 從8.4開始,如果innodb_buffer_pool_size<= 1G,則為1; 如果innodb_buffer_pool_size>1G,則是在下面兩個計算中,選取一個最小值:
innodb_buffer_pool_size / innodb_buffer_pool_chunk_size這個結果的1/2;
可用邏輯CPU數量的1/4。
innodb_change_buffering
決定哪些操作會使用change buffer,有關change buffer,我們在前面詳細介紹過:一文弄清楚MySQL更改緩衝區。
先前的版本預設值是all,表示innodb_change_buffering會快取插入、刪除標記操作和後台發生的實體刪除操作。
從8.4開始,預設是none,表示不緩存這些修改操作,這個不太理解,大家可以在留言區討論,可能考慮什麼因素。
3 克隆插件
克隆插件的版本要求放寬,允許在同一大版本號下的不同小版本之間進行複製。
4 組複製相關
group_replication_set_as_primary變化
使用group_replication_set_as_primary() 選出新主節點前,會等待正在進行的 DDL 語句完成。 當然,這是從8.1開始有的特性。
參數group_replication_consistency預設值變更
預設值改成了BEFORE_ON_PRIMARY_FAILOVER,以前是EVENTUAL。
這裡補充一下group_replication_consistency幾個值的介紹:
EVENTUAL
事務提交後會廣播到叢集的多數節點,然後節點檢查是否有衝突,如果沒有衝突,則事務在本地提交,其他節點非同步處理,可能導致讀取到稍舊的資料。
BEFORE_ON_PRIMARY_FAILOVER
當主節點發生故障時,必須等待新主處理完待處理的事務,才能開始回應業務的讀寫請求,這樣可以確保業務讀寫請求不會讀取到舊資料。
BEFORE
一個事務會等待之前的事務執行完後再開始執行,確保讀取到的資料是最新的。
AFTER
寫入事務會等待其變更在所有其他節點應用後才提交,確保後續事務讀取已寫入或其他節點上最新的值。 對唯讀事務沒有影響
BEFORE_AND_AFTER
會等待先前的事務執行完後才開始執行新事物,並等到事務在所有節點應用後才提交,確保讀取和提交都具有強一致性。
參數group_replication_exit_state_action預設值變更
group_replication_exit_state_action 預設值改成了OFFLINE_MODE,以前是READ_ONLY。
這個參數控制了MGR實例處理故障節點的方式,有三個選項:
設定為read_only時,會把這個實例的super_read_only設定為on;
設定為offline_mode時,會把這個實例切換到離線模式
設定為abort_server時,將關閉MySQL。
我們可以回顧一下MGR的故障偵測流程:
也就是當一個節點發生故障之後,進行group_replication_autorejoin_tries參數配置的自動重連次數之後。
這個節點的行為,之前預設情況下,是設定為super_read_only,現在是會把實例切換到離線模式。