星期二, 12月 12, 2017

FWD MySQL 5.6 GTID 如果遇到資料衝突的解決方法

MySQL 5.6 GTID 如果遇到資料衝突, 早期使用的SQL_SLAVE_SKIP_COUNTER方式不再適用

需要通過設置gtid_nextgtid_purged完成

Ref:

http://dbaplus.cn/news-11-857-1.html

 

Slave : show slave status \G;訊息中看到

那麼可以透過兩種方式跳過

1.@Slave DB

set gtid_next='e10c75be-5c1b-11e6-ab7c-000c296078ae:6';

begin;

commit;

set gtid_next='AUTOMATIC';

start slave;

 

或是已經知道是primary key duplicated, 可以跳過多個transaction.

 

2.@Slave DB

reset master;

set GLOBAL gtid_purged='gtid xxxxxxx : 1-10';

show master status;

start slave;

 

3.或是重新透過mysqldump進行Slave DB initial

[root@node1 ~]# mysqldump --all-databases --single-transaction --routines --events --host=127.0.0.1 --port=3306 --user=root > dump.sql

 

生成的dump.sql檔裡包含了設置gtid_purged的語句

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;

SET @@SESSION.SQL_LOG_BIN= 0;

...

SET @@GLOBAL.GTID_PURGED='e10c75be-5c1b-11e6-ab7c-000c296078ae:1-10';

...

SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

 

恢復資料前需要先通過reset master清空gtid_executed變數

[root@node2 ~]# mysql -h127.1 -e 'reset master'

[root@node2 ~]# mysql -h127.1 <dump.sql

沒有留言:

LinkWithin-相關文件

Related Posts Plugin for WordPress, Blogger...