在主庫初次啟動時,執行如下語句載入semisync_master外掛:
備庫上則載入semisync_slave外掛:
在初次載入外掛後,MySQL會將該外掛記錄到系統表mysql.plugin中,下次啟動時系統則會自動載入該外掛了,無需再次執行上面的命令。
另外,主備庫的配置檔案my.cnf還需要新增如下記錄來開啟semi-sync。主庫上,新增如下引數:
...
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
...
備庫上新增:
...
rpl_semi_sync_slave_enabled=1
...
那麼主備在啟動後,且slave執行緒開始dump主庫的日誌後,Semi-sync Replication就會開啟,上面的配置(rpl_semi_sync_master_timeout=1000)表示主庫在某次事務中,如果等待時間超過1000毫秒,那麼則降級為普通模式,不再等待備庫。如果主庫再次探測到,備庫恢復了,則會自動再次回到Semi-sync狀態。
Semi-sync的配置引數不多,按照上面配置就可以了,其他少數幾個引數預設即可。
主庫上的其他引數:
備庫上有:
root@localhost >show global status like '%semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 1 | 有多少個Semi-sync的備庫
| Rpl_semi_sync_master_net_avg_wait_time | 0 | 事務提交後,等待備庫響應的平均時間
| Rpl_semi_sync_master_net_wait_time | 0 | 等待網路響應的總次數
| Rpl_semi_sync_master_net_waits | 7 | 總的網路等待時間
| Rpl_semi_sync_master_no_times | 0 | 一共有幾次從Semi-sync跌回普通狀態
| Rpl_semi_sync_master_no_tx | 0 | 庫未及時響應的事務數,如果這個值很大就有問題
| Rpl_semi_sync_master_status | ON | 主庫上Semi-sync是否正常開啟
| Rpl_semi_sync_master_timefunc_failures | 0 | 時間函式未正常工作的次數
| Rpl_semi_sync_master_tx_avg_wait_time | 410 | 開啟Semi-sync,事務返回需要等待的平均時間
| Rpl_semi_sync_master_tx_wait_time | 2876 | 事務等待備庫響應的總時間
| Rpl_semi_sync_master_tx_waits | 7 | 事務等待備庫響應的總次數
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 | 改變當前等待最小二進位制日誌的次數
| Rpl_semi_sync_master_wait_sessions | 0 | 當前有幾個執行緒在等備庫響應
| Rpl_semi_sync_master_yes_tx | 7 | Semi-sync模式下,成功的事務數
---------------------