复制中错误处理
传统复制错误跳过:
stop slave sql_thread ;
set global slq_slave_skip_counter=1;
start slave sql_thread ;
GTID复制错误跳过:
stop slave sql_thread ;
set gtid_next='uuid:N';
begin;commit;
set gtid_next='automatic';
start slave sql_thread ;
注意:
若是binlog+pos复制,使用:
set global sql_salve_skip_counter=1;
代替下面步骤:
root@localhost [testdb]>set gtid_next='f0e27aec-b275-11e6-9c17-000c29565380:13';
root@localhost [testdb]>begin;commit;
root@localhost [testdb]>set gtid_next='automatic';
主从复制错误分类及处理方式
(1)主库create table ,从库已经存在,以主库为准处理方法:
slave:
set sql_log_bin=0;
drop table t1;
set sql_log_bin=1;
start slave sql_thread ;
例:slave:root@localhost [testdb]>create table t2(c1 int,c2 varchar(20));master:root@localhost [testdb]>create table t2(c1 int,c2 varchar(20));root@localhost [testdb]>show slave status\G...... Last_Error: Error 'Table 't2' already exists' on query. Default database: 'testdb'. Query: 'create table t2(c1 int,c2 varchar(20))'.......解决方法:slave:#drop操作不记录从库的binlog,这一步的作用是防止在以后主从切换的时候,把主库的t2表干掉root@localhost [testdb]>set sql_log_bin=0; root@localhost [testdb]>drop table t2;root@localhost [testdb]>set sql_log_bin=1;root@localhost [testdb]>start slave sql_thread;
(2)insert主键冲突的错误error1062
解决方法:直接删除从库冲突主键
例:slave:root@localhost [testdb]>set sql_log_bin=0;root@localhost [testdb]>insert into t1 values(2,'bbb');root@localhost [testdb]>set sql_log_bin=1;master:root@localhost [testdb]>insert into t1 values(2,'bbbbbb');slave :root@localhost [testdb]>show slave status\GLast_Errno: 1062 Last_Error: Could not execute Write_rows event on table testdb.t1; Duplicate entry '2' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000029, end_log_pos 2796slave :root@localhost [testdb]>set sql_log_bin=0;root@localhost [testdb]>delete from t1 where c1=2;root@localhost [testdb]>set sql_log_bin=1;root@localhost [testdb]>start slave sql_thread;
(3)update找不到记录error1032
唯一的方法:伪造符合条件的数据
例:master:root@localhost [testdb]>set sql_log_bin=0;root@localhost [testdb]>insert into t1 values(1,'aaa');root@localhost [testdb]>set sql_log_bin=1;root@localhost [testdb]>update t1 set c2='aaaaaa' where c1=1;slave:root@localhost [testdb]>show slave status\G...... Last_Error: Could not execute Update_rows event on table testdb.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000029, end_log_pos 2529 Skip_Counter: 0 Exec_Master_Log_Pos: 2283master:[root@Darren1 logs]# mysqlbinlog --base64-output=decode-rows --verbose --start-position=2283 --stop-position=2529 mysql-bin.000029......### UPDATE `testdb`.`t1`### WHERE### @1=1### @2='aaa'### SET### @1=1### @2='aaaaaa'slave:root@localhost [testdb]>set sql_log_bin=0;root@localhost [testdb]>insert into t1 values(1,'aaa');root@localhost [testdb]>set sql_log_bin=1;root@localhost [testdb]>start slave sql_thread;
(4)delete找不到错误 error1032
方法一:伪造符合条件的数据
例:master:root@localhost [testdb]>set sql_log_bin=0;root@localhost [testdb]>insert into t1 values(1,'aaa');root@localhost [testdb]>set sql_log_bin=1;root@localhost [testdb]>delete from t1 where c1=1;slave:root@localhost [testdb]>show slave status\G...... Slave_IO_Running: Yes Slave_SQL_Running: No Exec_Master_Log_Pos: 905 --从库已经成功执行主库到的postion点Last_SQL_Error: Could not execute Delete_rows event on table testdb.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_END_OF_FILE; the event's master log mysql-bin.000029, end_log_pos 1138 --从库执行结束点maser:[root@Darren1 logs]# mysqlbinlog --base64-output=decode-rows --verbose --start-position=905 --stop-position=1138 mysql-bin.000029......### DELETE FROM `testdb`.`t1`### WHERE### @1=1### @2='aaa'slave:root@localhost [testdb]>set sql_log_bin=0;root@localhost [testdb]>insert into t1 values(1,'aaa');root@localhost [testdb]>set sql_log_bin=1;root@localhost [testdb]>start slave sql_thread;方法二:从库跳过没有成功删除掉的行记录对应的GTIDmaster:root@localhost [testdb]>set sql_log_bin=0;root@localhost [testdb]>insert into t1 values(1,'aaa');root@localhost [testdb]>insert into t1 values(2,'bbb');root@localhost [testdb]>set sql_log_bin=1;root@localhost [testdb]>delete from t1 where c1 =1;root@localhost [testdb]>delete from t1 where c1 =2;root@localhost [testdb]>insert into t1 values(3,'ccc');slave:root@localhost [testdb]>show slave status\G......Last_SQL_Error: Could not execute Delete_rows event on table testdb.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_END_OF_FILE; the event's master log mysql-bin.000029, end_log_pos 1402 Retrieved_Gtid_Set: f0e27aec-b275-11e6-9c17-000c29565380:1-14 --从库结束的GTID点 Executed_Gtid_Set: ab6320bc-d158-11e6-88f8-000c29c1b8a9:1, f0e27aec-b275-11e6-9c17-000c29565380:10-11 --从库成功执行过的GTIDslave:root@localhost [testdb]>stop slave;root@localhost [testdb]>set gtid_next='f0e27aec-b275-11e6-9c17-000c29565380:12';root@localhost [testdb]>begin;commit;root@localhost [testdb]>set gtid_next='f0e27aec-b275-11e6-9c17-000c29565380:13';root@localhost [testdb]>begin;commit;root@localhost [testdb]>set gtid_next='automatic';root@localhost [testdb]>start slave;
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。