摘要:
什么情况会导致MySQL主从复制延迟?原因主要就是io,网络,和cpu,一搬cpu不会跑的太满,主要还在网络和io上,因为是读日志,一定会出现延时,就看这个延时是否接受,业务场景如...
什么情况会导致MySQL主从复制延迟?
原因主要就是io,网络,和cpu,一搬cpu不会跑的太满,主要还在网络和io上,因为是读日志,一定会出现延时,就看这个延时是否接受,业务场景如果对延时不敏感,可以从slave读取,如果是敏感,就可以控制从master读,以免延时带来读脏数据的问题
主从复制有两个线程,sql和io。前者负责sql的复制,后者负责写入。所以就是从两方面看,当网络比较差,或者带宽受限,或者master cpu过于繁忙导致binlog传输速度跟不上,或者slave机器的io性能较差,都容易导致主从复制延迟。可以通过show slave status的一些参数看出来,大概是xx_behind_master。mysql的主从其实问题很大,设计的比较low。至少三年多没跟过mysql了,不知道这方面有没有什么改进。
问题描述的是DBA进行DDL操作(即索引合并)后就出现了复制延迟。
图片来源:网络
- 这里可能的原因是:执行DDL需要一段时间,由于MySQL传统复制是异步复制,需要等到主库执行完成后才会将DDL语句传输到从库,在从库应用。所以出现了主从延迟,这种情况的延迟时间基本跟DDL在主库的执行时间吻合。
- 判断方法:可以通过对比主从延迟时间和主库执行DDL时间来判读是否是这个原因。
- 另附上MySQL传统主从复制的原理:
(1)、主库必须开启二进制日志
(2)、当有增删改的语句时,会记录到主库的binlog中
(3)、主库通过IO线程把binlog里面的内容传给从库的relay binlog(中继日志)(这是msyql复制是异步复制的原因)
(4)、从库的sql线程负责读取它的relay log里的信息并应用到数据库中