标题有点混乱,但我想不出一个更好的。
我有一个简单的香草MySQL复制,奴隶偶尔失败,与此错误: Error 'Can't find record in 'my_tbl'' on query. Default database: 'my_db'. Query: 'UPDATE my_tbl SET ... WHERE ...' Error 'Can't find record in 'my_tbl'' on query. Default database: 'my_db'. Query: 'UPDATE my_tbl SET ... WHERE ...' Error 'Can't find record in 'my_tbl'' on query. Default database: 'my_db'. Query: 'UPDATE my_tbl SET ... WHERE ...' (为了清楚起见省略了列)。
我假设这个错误的意思是,从属SQL线程执行此更新,并收到0 rows affected 。 当比较从中继日志中1 rows affected的1 rows affected的结果时,这不是预期的结果,从而产生错误。
当手动运行这个相同的更新事务时,它可以工作。 运行START SLAVE时同样的事情 – 它开始工作,并恢复正常。
这对我来说根本没有意义 – 如果这只是一个“重试”来解决这个问题,那怎么会发生呢? 一切都是以序列化的方式执行的,没有别的东西正在写入从属mysql服务器。
有人可以提供解释吗?
一些技巧 – 这是从5.5.7-rc到5.5.12的混合复制设置。
有一个关于InnoDB表的复制的MySQL错误#60091 ,可能会满足您的条件 – 看看它,检查您的版本是否受到影响,并最终检查是否有帮助。
对此的另一种解释是乱序执行 – 当UPDATE my_tbl SET ... WHERE ...运行时,WHERE条件还不能被任何行满足,因为它仍然会发生。 我想不出有什么理由 – 这将是在MySQL邮件列表上的问题。
我已经发现了这个问题背后的原因 – 一个在主站和从站上运行的事件。 解决方法很简单 – alter event event_name disable on slave; 在使用mysqldump创build一个slave的时候要记住一些事情。