【发布时间】:2017-09-21 13:15:12
【问题描述】:
我的 MySQL 复制有问题 - 主服务器上有一个表,它没有出现在从服务器上。 master和slave都有相同的master_log_file和master_log_position,slave_io和slave_sql线程都在运行,我什至尝试向master数据库添加一个空表,但它确实出现在slave数据库上。这不是我第一次遇到这样的错误,但在此之前我的症状是新数据没有出现在从数据库中。除了停止从属服务器上的复制、删除数据库、将其转储到主服务器上、同步到从属服务器并从新文件/位置重新启动复制之外,还有其他解决方案吗?
我注意到使用
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。
【问题讨论】:
-
首先,Relay_Log_Pos 和 Read_Master_Log_Pos 是不同的值,可以不同,没关系。对于您的复制:您是否使用相同的 mysql 版本和配置?如果您运行依赖于其他服务器不支持/被禁用的功能的语句,您可能会遇到这样的问题。您是否尝试过为未复制的表创建一个相同的表(具有不同的名称)以检查该表是否使用了在从站上不起作用的东西?
-
是否为replicate_do_db/replicate_do_table 设置了任何值?这些在 my.cnf 中,将处于从属状态。重新同步很痛苦 - 同意。你是什么binlog_format?行,混合,陈述?用 mysqlbinlog 检查 binlog 的内容——确保它在里面,否则它肯定不会复制...
-
@KevinBott 我没有为 replicate_do_db 设置值,我在 master 端使用 binlog_do_db 过滤它们,我的 binlog_format 是混合的。
-
@Solarflare - 我使用不同的版本(主服务器上的 5.5.55,从服务器上的 5.7.13)因为复制服务器不只复制一个服务器,我有不同的复制通道,但其他的工作正好。我会尝试用同一张桌子和另一个名字来做这个
-
可能就是这样,5.5->5.7 a) 不(官方)支持 b) 5.7。在很多事情上可能表现不同,因此不再支持某些语句(可能取决于您的配置设置)。您是否使用
--slave-skip-errors-option 运行您的从属服务器(或者您是否可能在发生导致从属服务器停止的错误后手动重新启动它)?
标签: mysql replication