MySQL复制错误(1062)

时间:2011-01-12 11:15:42

标签: mysql replication mysql-error-1062

我是MySQL的新手,经过长时间的搜索,我能够配置基于主从ROW的复制。我认为这样做是安全的,我不必一次又一次地重新检查。

但今天当我在奴隶身上做SHOW SLAVE STATUS;时,我发现了

  

无法执行Write_rows事件   table mydatabasename.atable;重复   关键'PRIMARY'的条目'174465',   Error_code:1062;处理程序错误   HA_ERR_FOUND_DUPP_KEY;事件   主日志mysql-bin.000004,   end_log_pos 60121977

当有人没有这样的错误并且两台服务器上的架构相同时,有人能告诉我这是怎么发生的,那怎么可能发生这种情况呢?以及如何修复它以使其再次工作以及如何在将来防止此类事件。

除了这个之外,还请让我知道除了这个之外还有什么意想不到的。

3 个答案:

答案 0 :(得分:6)

它永远不会发生在主人身上,为什么?

从master中复制了一系列SQL,
如果记录已存在于master中,则mysql拒绝在master

但是在slave上,如果失败并且复制位置没有进入下一个SQL(它刚停止)

<强>原因吗

该记录的插入查询直接写入从服务器,而不使用主服务器的复制

如何解决?

跳过奴隶上的错误,例如

SET GLOBAL sql_slave_skip_counter = N;

详情 - http://dev.mysql.com/doc/refman/5.0/en/set-global-sql-slave-skip-counter.html

或删除slave上的重复记录,再次恢复从属设备(让复制执行插入)

更糟糕的情况是,您需要重新进行设置以确保从站的数据完整性。

如何预防?

检查应用程序级别,确保不直接写入从站
这包括如何在命令提示符

中连接到mysql

拆分可以进行写入和读取的mysql用户,
因此,当不需要写入时,您的应用程序应使用读取用户(主服务器和从服务器) 使用write user(仅限master)执行操作需要写入数据库。

答案 1 :(得分:2)

跳过计数器始终不是一个可行的解决方案,您正在跳过记录,但它可能会影响其他记录。

以下是关于sql slave skip counter为什么不好的完整细节。

http://www.mysqlperformanceblog.com/2013/07/23/another-reason-why-sql_slave_skip_counter-is-bad-in-mysql/

答案 2 :(得分:0)

您可以删除从数据库中大于重复行的内容;

DELETE FROM mydatabasename.atable WHERE ID>=174465; 

然后

START SLAVE;