mysql數據庫複製延遲參考

1.做好數據庫主備,然後在備庫上執行:
mysql> stop slave;
mysql> change master to master_delay = N;
mysql> start slave;

其中N的單位是秒

2.查看複製延遲:
a.通過show slave status\G查看:
SQL_Delay: 30 表示延遲30s;

b.通過mysql.slave_relay_log_info表查看:
備庫參數設置了:
master_info_repository = TABLE
relay_log_info_repository = TABLE

select sql_delay from mysql.slave_relay_log_info;

c.如果沒有設置relay_log_info_repository = table 則查看備庫的relay-log日誌:
cat relay-log.info


3.取消relay延遲:
mysql> stop slave;
mysql> change master to master_delay = 0;
mysql> start slave;

4.設置了relay後重啓slave後不需要重新指定delay時間,默認使用上一次指定的時間,在使用master_delay時,
io_thread會實時的把主庫的日誌拉到備庫,只是在sql_relay時,sql_thread會延遲進行應用到備庫上。

5.通過複製延遲來恢復誤刪除的數據:
在備庫操作,確認誤刪除的數據還沒有應用:
stop slave sql_thread;
mysqlbinlog --base64-output=decode-rows -v binlog.000059 查找到刪除時候的日誌並定位到具體的gtid,然後備庫指定應用到刪除時候的gtid:
start slave sql_thread until sql_before_gtids='08a7bcf7-a8e4-11e8-8b61-0800278f64de:438364';

設置跳過刪除的事務:
stop slave;
set gtid_next='08a7bcf7-a8e4-11e8-8b61-0800278f64de:438364';
begin;
commit;
set gtid_next='AUTOMATIC';
start slave; 如果有多個事務,此處可以考慮只開始io_thread,繼續按照上面的來跳過刪除的事務;

最後導出被刪除的數據,應用到主庫上。
後續的備庫處理:
a.主庫導入數據後,延遲備庫重新初始化,這樣不影響其它備庫;
b.手動刪除相應的延遲庫上的數據,啓動slave進行應用,避免數據衝突;
c.在主庫導入數據時,回話級別設置set session sql_log_bin = 0;進行導入,這樣不記錄日誌,不會傳輸到備庫;
注意:如果是多個slave情況下需要每個slave都導入,延遲庫除外


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章