周顺的技术博客

  • 首页
  • 榜上有名
  • 文章归档
  • 读者排行
  • 豆瓣书影
  • 友情链接
  • DevOps (4)
  • Docker (4)
  • k8s (9)
  • linux (11)
  • Mysql (9)
  • Python (2)
  • Redis (1)
  • Shell (6)
  • 主题 (0)
  • 未分类 (0)

MySQL主从延迟的原因

  • xiaoteng
  • 2025-01-19
  • 0

可能原因

  1. 网络延迟:
    1. 网络不稳定或带宽不足会导致从库接收主库的复制数据缓慢。
  2. 磁盘I/O性能:
    1. 从库磁盘I/O性能差,导致SQL线程写入数据耗时较长。
  3. 从库负载高:
    1. 从库处理大量查询导致SQL线程的同步速度减缓。
  4. 大事务处理:
    1. 主库上的大事务会导致生成二进制日志速度过快,从库无法及时应用这些更改。
  5. 主库变更频率高:
    1. 主库频繁的写入操作诱发过多的数据需复制。

解决方案

  1. 优化网络配置:
    1. 增加网络带宽,减少主从之间的网络延迟。
  2. 提高硬件性能:
    1. 升级从库的硬件配置,例如使用SSD提高磁盘I/O。
  3. 减少从库负载:
    1. 使用多个从库实现读写分离如mycat读写分离操作,保证复制线程不受查询处理影响。
  4. 优化事务处理:
    1. 尽量减少主库大事务频率,将操作分解成多个小事务。
    2. 例如:如果需要插入大量记录,可将其拆分为多个较小的批量插入。
  5. 调优MySQL配置:
    1. 调整innodb_flush_log_at_trx_commit等参数以提高写入效率,增加复制线程数量,如调整slave_parallel_workers。
    2. innodb_flush_log_at_trx_commit 参数调整
      • 默认值为1,表示每次事务提交都会同步日志到磁盘。为了降低磁盘I/O,提高性能,可以设置为2,表示在事务提交时只写入日志缓存,定期刷入磁盘。
    3. 增加复制线程数量 (slave_parallel_workers)
      • MySQL 5.7及以上版本支持并行复制。通过增加从库复制线程数可以加速从库应用事务。
      • 在/etc/my.cnf中设置 slave_parallel_workers=4 # 根据服务器性能调整(最小为4,一般可以设置为CPU核心数的1/2或1/4),16核CPU => 4/8,32核CPU => 8/16
© 2026 周顺的技术博客
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}