2011-01-12 73 views
3

我是MySQL的新手,经过长时间的搜索后,我可以配置基于主从行的复制。我认为这将是安全的,我不必一次又一次地重新检查。今天MySQL复制错误(1062)

但是,当我做了奴隶SHOW SLAVE STATUS;后来我发现以下

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

谁能告诉我这是如何甚至可以来当主既有服务器上没有这样的错误和模式是一样的话,怎么可能出现这种情况。以及如何解决这个问题,以便今后再次开展工作,以及今后如何预防此类事情。

请让我知道还有什么意外的,我应该期望除此之外。

+0

有很多的原因,这可能会发生,但它会如果您想检查在主机和从机PK = 174465数据存储中的错误之后,看看数据是十分有用已经一样了。 – symcbean 2011-01-12 13:30:18

+0

谢谢,我检查一个它已经存在,但问题的原因如何可能发生,之前有一些电源故障,但不是通过使用数据库事务更新奴隶确保一致性? – 2011-01-12 14:01:25

+0

http://bugs.mysql.com/bug.php?id=38205此链接可能会对您有所帮助。 – programmer 2011-01-12 13:22:48

回答

6

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

的一系列SQL是从主复制,
如果记录master中已经存在,MySQL的拒绝上主

而是奴隶,如果失败,复制位置不前进到下一个SQL(它刚刚停止)

原因?

该记录的插入查询是直接写入到从没有使用复制从主

如何解决?

跳过站的错误,像

SET GLOBAL sql_slave_skip_counter = N; 

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

或删除从重复记录,然后再重新开始奴隶(让复制做插入)

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

如何预防?

检查应用水平,确保没有直接写到从
这包括如何连接到MySQL在命令提示符下

分割mysql用户,可以做的写入和读取,
所以,你的应用程序应该使用读取用户(主机和从机)不需要写入时。
使用写入用户(仅限主机)进行操作需要写入数据库。