天天看點

複制中常見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,如需轉載請自行聯系原作者

繼續閱讀