MYSQL复制不适用于所有表

时间:2017-09-21 13:15:12

标签: mysql replication

我有一个MySQL复制问题 - 主服务器上有一个表没有出现在从服务器上。 master和slave都有相同的master_log_file和master_log_position,slave_io和slave_sql线程都在运行,我甚至尝试将一个空表添加到master数据库,但它确实出现在slave数据库中。这不是我第一次遇到这样的错误,但在此之前我的症状是新的数据没有出现在奴隶数据库中。除了停止从站上的复制,丢弃数据库,将其转储到主服务器,rsyncing到从属服务器以及从新文件/位置重新启动复制之外,还有其他解决方案吗?

我注意到了

SHOW SLAVE STATUS;

Relay_Log_Pos小于Read_Master_Log_Pos,Relay_Log_File与Master_Log_File不同,但Slave_SQL_Running_State表示

Slave has read all relay log; waiting for more updates

Seconds_Behind_Master说0。

1 个答案:

答案 0 :(得分:2)

MySQL官方只支持复制到下一个更高版本(虽然它适用于5.7.13+),请参阅Replication Compatibility Between MySQL Versions

  

MySQL支持从一个版本系列复制到下一个更高版本的系列。例如,您可以从运行MySQL 5.5的主服务器复制到运行MySQL 5.6的从服务器,从运行MySQL 5.6的主服务器复制到运行MySQL 5.7的服务器,依此类推。

     

但是,如果主服务器使用语句或依赖于从属服务器上使用的MySQL版本不再支持的行为,则在从较旧的主服务器复制到较新的服务器时可能会遇到困难

默认情况下,如果发生错误,复制将停止,您必须重新启动它(修复错误后)。但是,如果您使用--slave-skip-errors=all - 选项,则会跳过这些错误:

  

通常,当从属设备发生错误时复制会停止,这使您有机会手动解决数据中的不一致问题。当语句返回选项值中列出的任何错误时,此选项会使从属SQL线程继续复制。

     

除非您完全理解错误原因,否则请勿使用此选项。如果复制设置和客户端程序中没有错误,并且MySQL本身没有错误,则永远不会发生停止复制的错误。不加选择地使用此选项会导致奴隶与主人无法同步,你不知道为什么会发生这种情况。

MySQL 5.5。和5.7。对于很多语句,实际上会有不同的行为,因此在这种情况下启用此选项需要更加谨慎。

如果没有看到您的实际table create语句,则不清楚究竟是什么导致了该问题以及如何修复它(或者是否可能),但您应该特别检查配置设置。 MySQL 5.7。 enables strict mode by default,因此对于不兼容的通常怀疑是日期/时间戳列的零默认值,如default '0000-00-00'(显式或隐式),不再允许,请参阅no_zero_date

即使您似乎不太热衷于100%复制(可以非常快速地滚雪球,但这取决于您为您的场景评估),重置您的从站(在修复配置设置之后)至少一次可能是最简单的解决方案,因为可能还有其他一些你可能错过的东西,如果执行没有错误,如果你的表和数据到目前为止与你的5.7奴隶兼容,也会进行双重检查。