天天看点

复制中常见1062和1032错误处理方法

复制中错误处理

传统复制错误跳过:

stop slave sql_thread ;

set global slq_slave_skip_counter=1;

start slave sql_thread ;

GTID复制错误跳过:

set gtid_next='uuid:N';

begin;commit;

set gtid_next='automatic';

注意:

若是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;

1

<code>&lt;span style=</code><code>"font-size:12px;font-family:'宋体', SimSun;"</code><code>&gt;例:&lt;br&gt;slave:&lt;br&gt;root@localhost [testdb]&gt;</code><code>create</code> <code>table</code> <code>t2(c1 </code><code>int</code><code>,c2 </code><code>varchar</code><code>(20));&lt;br&gt;master:&lt;br&gt;root@localhost [testdb]&gt;</code><code>create</code> <code>table</code> <code>t2(c1 </code><code>int</code><code>,c2 </code><code>varchar</code><code>(20));&lt;br&gt;root@localhost [testdb]&gt;show slave status\G&lt;br&gt;......&lt;br&gt; Last_Error: Error </code><code>'Table '</code><code>t2</code><code>' already exists'</code> <code>on</code> <code>query. </code><code>Default</code> <code>database</code><code>: </code><code>'testdb'</code><code>. Query: </code><code>'create table t2(c1 int,c2 varchar(20))'</code><code>&lt;br&gt;.......&lt;br&gt;解决方法:&lt;br&gt;slave:&lt;br&gt;#</code><code>drop</code><code>操作不记录从库的binlog,这一步的作用是防止在以后主从切换的时候,把主库的t2表干掉&lt;br&gt;root@localhost [testdb]&gt;</code><code>set</code> <code>sql_log_bin=0;  &lt;br&gt;root@localhost [testdb]&gt;</code><code>drop</code> <code>table</code> <code>t2;&lt;br&gt;root@localhost [testdb]&gt;</code><code>set</code> <code>sql_log_bin=1;&lt;br&gt;root@localhost [testdb]&gt;start slave sql_thread;&lt;/span&gt;</code>

(2)insert主键冲突的错误error1062

解决方法:直接删除从库冲突主键

<code>&lt;span style=</code><code>"font-size:12px;font-family:'宋体', SimSun;"</code><code>&gt;例:&lt;br&gt;slave:&lt;br&gt;root@localhost [testdb]&gt;</code><code>set</code> <code>sql_log_bin=0;&lt;br&gt;root@localhost [testdb]&gt;</code><code>insert</code> <code>into</code> <code>t1 </code><code>values</code><code>(2,</code><code>'bbb'</code><code>);&lt;br&gt;root@localhost [testdb]&gt;</code><code>set</code> <code>sql_log_bin=1;&lt;br&gt;master:&lt;br&gt;root@localhost [testdb]&gt;</code><code>insert</code> <code>into</code> <code>t1 </code><code>values</code><code>(2,</code><code>'bbbbbb'</code><code>);&lt;br&gt;slave :&lt;br&gt;root@localhost [testdb]&gt;show slave status\G&lt;br&gt;Last_Errno: 1062&lt;br&gt;                   Last_Error: Could </code><code>not</code> <code>execute</code> <code>Write_rows event </code><code>on</code> <code>table</code> <code>testdb.t1; Duplicate entry </code><code>'2'</code> <code>for</code> <code>key</code> <code>'PRIMARY'</code><code>, Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000029, end_log_pos 2796&lt;br&gt;slave :&lt;br&gt;root@localhost [testdb]&gt;</code><code>set</code> <code>sql_log_bin=0;&lt;br&gt;root@localhost [testdb]&gt;</code><code>delete</code> <code>from</code> <code>t1 </code><code>where</code> <code>c1=2;&lt;br&gt;root@localhost [testdb]&gt;</code><code>set</code> <code>sql_log_bin=1;&lt;br&gt;root@localhost [testdb]&gt;start slave sql_thread;&lt;/span&gt;</code>

(3)update找不到记录error1032

唯一的方法:伪造符合条件的数据

<code>&lt;span style=</code><code>"font-size:12px;font-family:'宋体', SimSun;"</code><code>&gt;例:&lt;br&gt;master:&lt;br&gt;root@localhost [testdb]&gt;</code><code>set</code> <code>sql_log_bin=0;&lt;br&gt;root@localhost [testdb]&gt;</code><code>insert</code> <code>into</code> <code>t1 </code><code>values</code><code>(1,</code><code>'aaa'</code><code>);&lt;br&gt;root@localhost [testdb]&gt;</code><code>set</code> <code>sql_log_bin=1;&lt;br&gt;root@localhost [testdb]&gt;</code><code>update</code> <code>t1 </code><code>set</code> <code>c2=</code><code>'aaaaaa'</code> <code>where</code> <code>c1=1;&lt;br&gt;slave:&lt;br&gt;root@localhost [testdb]&gt;show slave status\G&lt;br&gt;......&lt;br&gt; Last_Error: Could </code><code>not</code> <code>execute</code> <code>Update_rows event </code><code>on</code> <code>table</code> <code>testdb.t1; Can</code><code>'t find record in '</code><code>t1</code><code>', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event'</code><code>s master log mysql-bin.000029, end_log_pos 2529&lt;br&gt;                 Skip_Counter: 0&lt;br&gt;          Exec_Master_Log_Pos: 2283&lt;br&gt;master:&lt;br&gt;[root@Darren1 logs]# mysqlbinlog </code><code>--base64-output=decode-rows --verbose --start-position=2283 --stop-position=2529 mysql-bin.000029&lt;br&gt;......&lt;br&gt;### UPDATE `testdb`.`t1`&lt;br&gt;### WHERE&lt;br&gt;###   @1=1&lt;br&gt;###   @2='aaa'&lt;br&gt;### SET&lt;br&gt;###   @1=1&lt;br&gt;###   @2='aaaaaa'&lt;br&gt;slave:&lt;br&gt;root@localhost [testdb]&gt;set sql_log_bin=0;&lt;br&gt;root@localhost [testdb]&gt;insert into t1 values(1,'aaa');&lt;br&gt;root@localhost [testdb]&gt;set sql_log_bin=1;&lt;br&gt;root@localhost [testdb]&gt;start slave sql_thread;&lt;/span&gt;</code>

(4)delete找不到错误 error1032

方法一:伪造符合条件的数据

<code>&lt;span style=</code><code>"font-size:12px;font-family:'宋体', SimSun;"</code><code>&gt;例:&lt;br&gt;master:&lt;br&gt;root@localhost [testdb]&gt;</code><code>set</code> <code>sql_log_bin=0;&lt;br&gt;root@localhost [testdb]&gt;</code><code>insert</code> <code>into</code> <code>t1 </code><code>values</code><code>(1,</code><code>'aaa'</code><code>);&lt;br&gt;root@localhost [testdb]&gt;</code><code>set</code> <code>sql_log_bin=1;&lt;br&gt;root@localhost [testdb]&gt;</code><code>delete</code> <code>from</code> <code>t1 </code><code>where</code> <code>c1=1;&lt;br&gt;slave:&lt;br&gt;root@localhost [testdb]&gt;show slave status\G&lt;br&gt;......&lt;br&gt;            Slave_IO_Running: Yes&lt;br&gt;            Slave_SQL_Running: </code><code>No</code><code>&lt;br&gt;          Exec_Master_Log_Pos: 905   </code><code>--从库已经成功执行主库到的postion点&lt;br&gt;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 --从库执行结束点&lt;br&gt;maser:&lt;br&gt;[root@Darren1 logs]# mysqlbinlog --base64-output=decode-rows --verbose --start-position=905 --stop-position=1138 mysql-bin.000029&lt;br&gt;......&lt;br&gt;### DELETE FROM `testdb`.`t1`&lt;br&gt;### WHERE&lt;br&gt;###   @1=1&lt;br&gt;###   @2='aaa'&lt;br&gt;slave:&lt;br&gt;root@localhost [testdb]&gt;set sql_log_bin=0;&lt;br&gt;root@localhost [testdb]&gt;insert into t1  values(1,'aaa');&lt;br&gt;root@localhost [testdb]&gt;set sql_log_bin=1;&lt;br&gt;root@localhost [testdb]&gt;start slave sql_thread;&lt;br&gt;方法二:从库跳过没有成功删除掉的行记录对应的GTID&lt;br&gt;master:&lt;br&gt;root@localhost [testdb]&gt;set sql_log_bin=0;&lt;br&gt;root@localhost [testdb]&gt;insert into t1 values(1,'aaa');&lt;br&gt;root@localhost [testdb]&gt;insert into t1 values(2,'bbb');&lt;br&gt;root@localhost [testdb]&gt;set sql_log_bin=1;&lt;br&gt;root@localhost [testdb]&gt;delete from t1 where c1 =1;&lt;br&gt;root@localhost [testdb]&gt;delete from t1 where c1 =2;&lt;br&gt;root@localhost [testdb]&gt;insert into t1 values(3,'ccc');&lt;br&gt;slave:&lt;br&gt;root@localhost [testdb]&gt;show slave status\G&lt;br&gt;......&lt;br&gt;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&lt;br&gt;           Retrieved_Gtid_Set: f0e27aec-b275-11e6-9c17-000c29565380:1-14   --从库结束的GTID点&lt;br&gt;            Executed_Gtid_Set: ab6320bc-d158-11e6-88f8-000c29c1b8a9:1,&lt;br&gt;            f0e27aec-b275-11e6-9c17-000c29565380:10-11  --从库成功执行过的GTID&lt;br&gt;slave:&lt;br&gt;root@localhost [testdb]&gt;stop slave;&lt;br&gt;root@localhost [testdb]&gt;set gtid_next='f0e27aec-b275-11e6-9c17-000c29565380:12';&lt;br&gt;root@localhost [testdb]&gt;begin;commit;&lt;br&gt;root@localhost [testdb]&gt;set gtid_next='f0e27aec-b275-11e6-9c17-000c29565380:13';&lt;br&gt;root@localhost [testdb]&gt;begin;commit;&lt;br&gt;root@localhost [testdb]&gt;set gtid_next='automatic';&lt;br&gt;root@localhost [testdb]&gt;start slave;&lt;/span&gt;</code>

本文转自 Darren_Chen 51CTO博客,原文链接:http://blog.51cto.com/darrenmemos/1921192,如需转载请自行联系原作者

继续阅读