本文通过一组测试,来看一下MySQL主从库服务器时钟的差异对MySQL复制延迟的影响。
一、测试环境
- 操作系统:CentOS 7.3,4核,16G
- MySQL: 5.7.19 1主2从
二、测试场景
- 主库时钟比从库早1分钟,5分钟,1小时,1天
- 主库时钟比从库晚1分钟,5分钟,1小时,1天
三、测试步骤
- sysbench 4线程往主库写入数据
- 修改主库时间,如date -s "2020-02-05 20:39:00"
- 从库执行show slave status,观察复制状态和复制延迟时间
四、测试结果
场景一:主库没有写入
两个从库Seconds_Behind_Master始终为0。
场景二:主库sysbench 4线程写入
结果如下:
两个从库Seconds_Behind_Master | 两个从库重启复制,Seconds_Behind_Master | |
---|---|---|
主库快1分钟 | 0,0 | 0,0 |
主库快5分钟 | 0,0 | 0,0 |
主库快1小时 | 0,0 | 0,0 |
主库快1天 | 0,0 | 0,0 |
主库慢1分钟 | 60,59 | 0,0 |
主库慢5分钟 | 301,300 | 0,0 |
主库慢1小时 | 3601,3601 | 0,0 |
主库慢1天 | 86372,86370 | 0,0 |
五、结论
- 在没有写入的情况下,主从时钟差异从1分钟到1天,不管主库时钟快于从库,还是慢于从库,对于主从复制延迟均没有影响。
- 在正常写入速度下(即主从无延迟),若主库时钟快于从库时,从库Seconds_Behind_Master始终为0,若主库时钟慢于从库,从库Seconds_Behind_Master值与主从时钟差异有关,时钟差异越大,Seconds_Behind_Master值也越大,若此时重启从库复制线程(stop slave; start slave;),从库Seconds_Behind_Master恢复为0。