复制

mysql支持2种复制方式,基于语句和基于行。语句复制在3.23版本就存在,行复制在5.1版本中才出现。
都是通过主库记录二进制日志,从库重放日志来实现异步数据复制。

复制原理

  1. 主库把数据更改记录到二进制日志(binlog)
  2. 备库将主库的日志复制到自己的中继日志
  3. 备库继续读取中继日志中的事件,并将其重放到备库数据上

具体细节

  1. 列表项目

复制延迟

即主从同步延迟,既然是复制,肯定存在延迟,最好是在设计应用能够容忍复制延迟。

延迟原因:

  1. 备库单线程复制设计,导致效率低下。因为备库的单线程和cpu只会有效地使用1个CPU和磁盘。
  2. 锁阻塞。备库的查询可能会阻塞复制线程。因为是单线程,阻塞时做不了其他事情,只能等待。

产生延迟的方式两种:

  1. 突然延迟,然后再跟上
  2. 稳定的延迟增大
    前者通常由于一条查询时间很长的sql导致,后者跟备库容量有关

最好的分析办法是查看慢查询日志,用pt-query-digest工具来分析。如果开启log_slow_slave_statements选项,慢查询日志还记录复制线程执行的语句,这样就能找到复制时哪些语句执行慢了。

复制延迟解决方案

  1. 除了用更好的硬盘和CPU(固态硬盘),复制没有太多的优化空间。
  2. 不要重复执行写操作较高的部分,优化查询,是保持备库同步最好的办法。

标签: mysql

添加新评论