MySQL 主从延迟

案例 [1] #

案例一:主库DML请求频繁 #

  • 解决思路
    • 如果是MySQL 5.7以下的版本,可以做分片(sharding),通过水平扩展(scale out)的方法打散写请求,提升写请求写入binlog的并行度。
    • MySQL 5.7以上的版本,
      • 在MySQL 5.7,使用了基于逻辑时钟(Group Commit)的并行复制
      • 而在MySQL 8.0,使用了基于Write Set的并行复制

案例二:主库执行大事务 #

  • 解决思路 拆分大事务语句到若干小事务中,这样能够进行及时提交,减小主从复制延时。

案例三:主库对大表执行DDL语句 #

  • 解决思路
    • 避免业务高峰,尽量安排在业务低峰期执行 ;
    • set sql_log_bin=0后,分别在主从库上手动执行DDL(此操作对于某些DDL操作会造成数据不一致,请务必严格测试)

参考 #

  1. 高可用数据库主从复制延时的解决方案
  2. 《26 | 备库为什么会延迟好几个小时?》 未