MySQL 5.6 GTID 如果遇到資料衝突, 早期使用的SQL_SLAVE_SKIP_COUNTER方式不再適用
需要通過設置gtid_next或gtid_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
沒有留言:
張貼留言