mysql master-slave 複寫延滯同步問題

之前設置好正式環境中的 MySQL Master/Slave 後一直沒有什麼空調效一下,直到最近 DW 的同事回報說在Mirror的從庫資料更新緩慢,有時資料差到數小時或快一天, 研究了一下及加入了一些監控的設置,主要是環境後有發生當主庫大量異動時從庫來不及同步及寫入,一直以為是機器性能的問題,後來看了文件發現這個問題還不少人都有發生,這也是很常見的問題

看了一下在MySQL 5.7官方宣稱已解決或改善這個問題,因此來好好的研究及記錄一下 方便自已日後需要調整時參考.

主要參數如下:

slave_parallel_type 預設是 DATABASE  變更為 LOGICAL_CLOCK
slave_parallel_workers 預設是 0  變更為 8 (我是依 CPU個數x2 去設置)
slave_preserve_commit_order  預設是 OFF
log_slave_updates 預設是 ON 變更為 OFF
binlog_transaction_dependency_tracking 預設是 COMMIT_ORDER 變更為 WRITESET
transaction_write_set_extraction 預設是 OFF 變更為 XXHASH64
binlog_format 預設是 ROW
binlog_group_commit_sync_delay 預設是 0 變更為 3000

所以要先在 SLAVE 上將 slave stop掉.才能變更 slave_parallel_type

[Master]
> set global slave_parallel_type=LOGICAL_CLOCK;
> set global slave_parallel_workers=8;
> set global slave_preserve_commit_order=OFF;
> set global binlog_transaction_dependency_tracking=WRITESET;
> set global transaction_write_set_extraction=XXHASH64;
> set global binlog_format=ROW;
> set global binlog_group_commit_sync_delay=3000;

[Slave]

> slave stop;
> set global slave_parallel_type=LOGICAL_CLOCK;
> set global slave_parallel_workers=8;
> set global slave_preserve_commit_order=OFF;
> set global binlog_transaction_dependency_tracking=WRITESET;
> set global transaction_write_set_extraction=XXHASH64;
> set global binlog_format=ROW;
> set global binlog_group_commit_sync_delay=3000;
> slave start;

還有記得別忘了在 mysql.cnf 中一起將這些設定加上去,這樣應就可以了

我也順手設置了一下用 prometheus 去抓slave 和 master 的lagging second 這樣以後就不用登上去看差異時間了 XD

收工~

Author: jerryw1974

learning and focus on computer science, cloud infrastructure, virtualization and information security, technical, networking,platform system and cyber-security related topic.