MySQL 半同步複製

zping發表於2016-04-07

在主庫初次啟動時,執行如下語句載入semisync_master外掛:

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

備庫上則載入semisync_slave外掛:

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

 

在初次載入外掛後,MySQL會將該外掛記錄到系統表mysql.plugin中,下次啟動時系統則會自動載入該外掛了,無需再次執行上面的命令。

另外,主備庫的配置檔案my.cnf還需要新增如下記錄來開啟semi-sync。主庫上,新增如下引數:

$vi my.cnf
...
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
...

備庫上新增:

$vi my.cnf
...
rpl_semi_sync_slave_enabled=1
...

那麼主備在啟動後,且slave執行緒開始dump主庫的日誌後,Semi-sync Replication就會開啟,上面的配置(rpl_semi_sync_master_timeout=1000)表示主庫在某次事務中,如果等待時間超過1000毫秒,那麼則降級為普通模式,不再等待備庫。如果主庫再次探測到,備庫恢復了,則會自動再次回到Semi-sync狀態。

3. 其他引數

Semi-sync的配置引數不多,按照上面配置就可以了,其他少數幾個引數預設即可。

主庫上的其他引數:

mysql> show variables like "%rpl_semi%"; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | rpl_semi_sync_master_enabled | ON | | rpl_semi_sync_master_timeout | 1000 | | rpl_semi_sync_master_trace_level | 32 | | rpl_semi_sync_master_wait_no_slave | ON | +------------------------------------+-------+

備庫上有:

mysql> show variables like "%rpl_semi%"; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | rpl_semi_sync_master_wait_no_slave | ON | | rpl_semi_sync_slave_enabled | ON | | rpl_semi_sync_slave_trace_level | 32 | +------------------------------------+-------+

 

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模式下,成功的事務數
---------------------

相關文章