我注意到我的MySQL复制品不会更新从属服务器中的数据。
SHOW SLAVE STATUS
显示没有落后于主人并且没有错误。但是,从站已过时数据(超过30分钟;从站和主站位于同一网络中)。
如果我执行STOP SLAVE
和START SLAVE
并检查从属状态,我会看到奴隶在主人身后大约1720秒。但是,如果我再次检查从站状态(在不到3秒之后),我看到从站不再在主站后面(0秒)。
此外,在我重新启动从属复制线程(STOP SLAVE
和START SLAVE
)后,从属服务器从主服务器获取所有新数据。
我该如何解决这个问题?
答案 0 :(得分:1)
请按照以下步骤深入了解您的问题:
步骤1:每当遇到此问题,然后在您的slave上执行show full processlist命令并检查在那里执行的查询类型,可能是在服务器上运行了一些重的更改/更新/删除查询。假设一个查询在master上需要50秒,那么首先它将在master上完全执行,此时你的slave将落后0秒,但是当它来到slave时,你的slave会显示大约。落后50秒和下一秒它将捕获主人(这只是一个例子)..这种类型的查询可能是批量的。如果这种情况比奴隶自动将在一段时间后赶上主人,你也可以在show process list下查看正在运行的查询;
步骤2:如果没有上述情况并且你的奴隶继续追踪主人并且只能在停止并启动奴隶后恢复,那么你可能会在主人身上使用一些复杂的查询(比如插入mytable selet field1, table1中的field2连接table2连接table3 ....)和slave在其中混淆。在这种情况下,奴隶在停止和启动奴隶后将正常工作。要注意这个问题,你必须处理这种类型的查询。因此,从show processlist获取可能的查询并对其进行处理。
希望这会对你有所帮助。
答案 1 :(得分:0)
可能的原因是:
<强> 1。两个或多个从属服务器上的服务器ID重复。
症状:从站上的MySQL错误日志显示从属线程正在不断地与主站连接/断开连接。 解决方案:检查复制中的所有节点是否都具有唯一的服务器ID。
<强> 2。双主设置,“log_slave_updates”已启用,服务器ID已更改。
场景:你在第一个主服务器上停止MySQL,然后停止第二个服务器。然后,您执行一些迁移或维护。突然间,您意识到更改服务器ID以匹配新IP地址的末尾部分会更好。您将所有内容重新联机并注意到由于启用了log_slave_updates而导致主机之间某些部分binlog循环的奇怪行为。但是,如果新的服务器ID不同,怎么会这样呢?当一些数据在关闭之前写入第二个主数据时,当第一个数据已经关闭并且两个节点都开始将循环数据识别为不属于自己的数据时,这确实可能是真的,因此应用它们并将复制作为发送者的服务器标识传递下去不匹配在关机之前在binlogs数据本身中写入的server-id。所以我们有一个无限循环。 解决方案:只需将其中一个主机上的从机位置重新设置为新的,最后“鬼”binlogs将停止循环。
第3。 MySQL选项“sync_relay_log”,“sync_relay_log_info”,“sync_master_info”。
症状:根据“SHOW SLAVE STATUS”输出,一次奴隶线程排队显示一些延迟的事件,另一次等待主显示0滞后等等。考虑到真正的主要位置,确实应该有XXXXX延迟。另一个症状是IO饱和度和高磁盘IOPS数,但磁盘只占pt-diskstats所示的一半。在我的情况下,我观察到主机上有1500个iops,多了10个 - 15000个iops,60%在奴隶上忙。你可能认为它可能是一个基于行的复制(binlog_format = ROW)和主机上的不断更新,但仍然是为什么延迟是抖动而磁盘IO很高但不是100%的容量? 可能的原因:检查您是否没有启用sync_relay_log,sync_relay_log_info,sync_master_info,这使得slave可以在每个事件上将数据同步到磁盘,例如如果启用了自动提交,则sync_relay_log确保每个语句写入一个中继日志,否则每个事务写入一次。除非磁盘具有电池备份缓存,否则启用这些选项会使系统变慢,这会使同步速度非常快。
<强> 4。网络延迟。
症状:主站和从站之间的网络链路不良。使用饱和链路,从IO_thread将很难跟上主站。 SQL线程在等待IO_thread存储的更多事件时报告零延迟。一旦IO_thread能够将更多内容写入中继日志,SQL_thread将再次报告XXX秒。 解决方案:检查网络吞吐量。
<强> 5。延迟承诺的交易。
场景:如果你在master上打开一个事务,然后由于某种原因(可能是应用程序错误或前端问题)你提交它一段时间后,它会将它显示为slave上的复制延迟。因此,例如,如果您在提交前等待一小时,则在执行该事务时,它将在从属设备上显示3600秒的延迟。 解决方案:使用pt-heartbeat工具。