MySQL中主从复制重复密钥问题的修复方法

-------------------报价开始------------------------ 3。如果你决定,你可以跳过下面的语句从主,发出以下声明:MySQL >设置全局sql_slave_skip_counter MySQL > = N;开始的奴隶;n的值应该是一份从1如果主人不使用auto_increment或(last_insert_id)。否则,值应该是2。之所以用一个价值陈述,使用auto_increment 2或last_insert_id(是),他们将在大师的二进制日志事件。

-------------------报价结束------------------------

MySQL的文档的含义是,当主人给奴隶的语句使用auto_increment或last_insert_id(),它需要跳过两事件,但这是没有的情况下。

测试过程如下:172.16.161.26主人172.16.161.15从同步c2cdb,初始状态的确定

1。在主目录上创建测试表



MySQL >创建表tmp_test_0208(ID为不空auto_increment varchar(30),名,小学);
查询OK,0行受影响(0.20秒)


2,插入3条药膏记录





MySQL >插入tmp_test_0208值(1,A),(2,B),(3,C);
查询OK,3行受影响(0秒)
记录:3个重复:0个警告:0

MySQL SELECT * FROM tmp_test_0208 >;
+ + +
| ID |名字|
+ + +
| 1 |一|
| 2 | B |
| 3 | C |
+ + +
3行(0秒)


3,插入3条关于船长的记录

MySQL >插入tmp_test_0208(名字)值(A),(B),(C);
查询OK,3行受影响(0.02秒)
记录:3个重复:0个警告:0

MySQL SELECT * FROM tmp_test_0208 >;
+ + +
| ID |名字|
+ + +
| 1 |一|
| 2 | B |
| 3 | C |
+ + +
3行(0秒)


4,奴隶的SQL线程中止





/ usr /局部/ MySQL /斌/ MySQL -中-通过c2cdb·S·ESHOW SLAVE STATUS G |较slave_io_running | SL
ave_sql_running
slave_io_running:是的
slave_sql_running:无


5、启动后跳下STATEMATE奴隶是正常的

MySQL >设置全局sql_slave_skip_counter = 1;
查询OK,0行受影响(0秒)

从开始;
查询OK,0行受影响(0秒)

/ usr /局部/ MySQL /斌/ MySQL -中-通过c2cdb·S·ESHOW SLAVE STATUS G |较slave_io_running | SL
ave_sql_running
slave_io_running:是的
slave_sql_running:是的


从终端errlog如下:070208 16:07:59 {错误}奴隶:error'duplicate进入'1'for键1键,16:07:59 {错误},错误,和X.



070208、16:07:59 {错误}错误运行查询,从SQL线程中止。修复问题,并错误。

070208 16:09:59 {注}从SQL线程初始化,在log'db_auction1-bin启动复制。000203',000203'14215101, 200682931 'db_auction1-bin,



在掌握羰基binlog相应记录如下:

# # 070208 16:08:00服务器ID 1在14215101 log_pos IntVar insert_id = 1 14215101集# 070208 16:08:00服务器#;14215129号1 log_pos 14215129查询thread_id = 2744782 = 0 = 0 exec_time error_code设置时间= 1170922080;插入tmp_test_0208(名字)值(A),(B),(C);

摘要:跳过失败的SQL使用的全球sql_slave_skip_counter命令