什么情况会导致MySQL主从复制延迟

1.网络的延迟 由于mysql主从复制是基于binlog的一种异步复制,通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。2.主从两台机器的负载不一致 由于mysql主从复制是主数据库上面启动1个io线程...
什么情况会导致MySQL主从复制延迟
Asynchronous Replication Automatic failover
其原理是在一条异步复制通道上配置多个可用复制源,当某个复制源不可用时(宕机、复制链路中断),且 slave 的 IO 线程尝试重连无效,自动根据权重选择新的源继续同步。
准备一个 MGR 集群和单实例,模拟复制链路切换,当 primary 故障,slave 自动切换到其他节点。dbdeployer deploy replication --topology=group 8.0.22 --single-primarydbdeployer deploy single 8.0.22
2. 在从机上建立指向 MGR 主节点的复制通道,
change master to master_user='msandbox',master_password='msandbox', master_host='127.0.0.1',master_auto_position=1,source_connection_auto_failover=1,master_port=23223,master_retry_count=6,master_connect_retry=10 for channel 'mgr-single';
在 master_retry_count 和 master_connect_retry 的设置上要考虑尝试重连多久才切换复制源。
3. 在从机上配置 asynchronous connection auto failover
配置 asynchronous connection auto failover 的两个函数:
asynchronous_connection_failover_add_source(channel-name,host,port,network-namespace,weight)
asynchronous_connection_failover_delete_source(channel-name,host,port,network-namespace)
权重值大的被优先级选择,可以配合MGR的选举权重配置 asynchronous_connection_failover 的权重。当 MGR 节点切换,异步复制也能切换到新的主节点。
SELECT asynchronous_connection_failover_add_source('mgr-single','127.0.0.1',23223,null,100); SELECT asynchronous_connection_failover_add_source('mgr-single','127.0.0.1',23224,null,80); SELECT asynchronous_connection_failover_add_source('mgr-single','127.0.0.1',23225,null,50);start slave for channel 'mgr-single';
4. 检查异步复制通道是否启用 failover。
mysql> SELECT CHANNEL_NAME, SOURCE_CONNECTION_AUTO_FAILOVER FROM performance_schema.replication_connection_configuration; +--------------+---------------------------------+| CHANNEL_NAME | SOURCE_CONNECTION_AUTO_FAILOVER |+--------------+---------------------------------+| mgr-single | 1 |+--------------+---------------------------------+1 row in set (0.01 sec
5. 把 MGR 的 primary 节点 kill 掉,这个从节点会在尝试几轮重连失败后自动切换到次权重的复制源,其日志中会输出切换信息。
注意:当主节点故障,一旦复制链路成功 failover 后,在新的复制链路没有故障时,如果原主节点恢复,是不会回切的。如果当前复制链路发生故障,会再次选择权重高的进行切换
2021-01-28
1.网络的延迟
由于mysql主从复制是基于binlog的一种异步复制,通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。
2.主从两台机器的负载不一致
由于mysql主从复制是主数据库上面启动1个io线程,而从上面启动1个sql线程和1个io线程,当中任何一台机器的负载很高,忙不过来,导致其中的任何一个线程出现资源不足,都将出现主从不一致的情况。
3.max_allowed_packet设置不一致
主数据库上面设置的max_allowed_packet比从数据库大,当一个大的sql语句,能在主数据库上面执行完毕,从数据库上面设置过小,无法执行,导致的主从不一致。
4.key自增键开始的键值跟自增步长设置不一致引起的主从不一致。2017-08-11
mengvlog 阅读 9 次 更新于 2025-07-20 16:08:40 我来答关注问题0
  • MySQL主从复制是指将主数据库的数据同步复制到从数据库中。主数据库(Master)负责写入数据,从数据库(Slave)则只负责读取数据。主从复制的核心是binlog日志,主数据库对其进行修改时就会产生binlog日志。Slave在连接Master时会将binlog日志复制到自己的relay log日志文件中,然后Slave会启动一个I/O线程,...

  • 1.网络的延迟 由于mysql主从复制是基于binlog的一种异步复制,通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。2.主从两台机器的负载不一致 由于mysql主从复制是主数据库上面启动1个io线程...

  • 面对“从库遇Error_code: 1236”的情况,这一问题通常源于从库试图读取主库binlog position时出现错误,这主要出现在主服务器遭遇异常崩溃,如硬盘损坏、RAID卡故障或者突然断电导致binlog未能及时同步到硬盘的情况。遇到这种情况的解决策略主要包括以下几个步骤:1. **主库binlog位置检查**:首先,需前往...

  • MySQL主从复制过程中常见的报错问题及解决方法如下:Delete_rows错误:问题描述:当在master服务器上删除一条记录后,slave服务器未能获取到这条记录,导致报错。解决方法:确认master服务器已经成功删除该记录。如果master和slave服务器均已完成删除操作,slave可以直接跳过这条记录,避免报错。若遇到“ERROR 185...

  •  文暄生活科普 Mysql 主从复制 从库遇Error_code: 1032;

    面对MySQL主从复制中从库遭遇Error_code: 1236的挑战,我们首先需明确这一错误通常源自从库试图读取主库binlog position问题,尤其是当主服务器出现异常崩溃、磁盘损坏、RAID卡故障或突发断电等情况,导致binlog在磁盘上未能及时同步,从而从库在读取时遇到不存在的binlog position。解决这一问题的关键在于...

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部