测试MySQL8从库的relay_log_recovery参数

版本:

 8.0.34 

relay_log_recovery – > OFF

表:

测试MySQL8从库的relay_log_recovery参数-每日运维

从状态:

测试MySQL8从库的relay_log_recovery参数-每日运维

主日志:

测试MySQL8从库的relay_log_recovery参数-每日运维

关闭relay_log_recovery 实验

  1. 停止SQL slave 应用,主库插入,查询从库

测试MySQL8从库的relay_log_recovery参数-每日运维

可见数据未同步

  1. 观测从库log状态 数据状态

测试MySQL8从库的relay_log_recovery参数-每日运维

  1. 观测relay日志

测试MySQL8从库的relay_log_recovery参数-每日运维

可见已经写入

模拟断电后消除该log再次观测log情况

测试MySQL8从库的relay_log_recovery参数-每日运维

模拟丢失这个log

测试MySQL8从库的relay_log_recovery参数-每日运维

打开mysql服务器

测试MySQL8从库的relay_log_recovery参数-每日运维

可见生成一个新的relay日志且没有之前内容,观测slave状态

测试MySQL8从库的relay_log_recovery参数-每日运维

可见主从状态是正常的,但是EXEC_MASTER_LOG_POS并没有和Read_MASTER_LOG_POS相等于,尝试切换主机log,发现从库表数据没有更新,丢失了两条插入数据。

测试MySQL8从库的relay_log_recovery参数-每日运维

符合预期。

实验2:打开参数relay_log_recovery

测试MySQL8从库的relay_log_recovery参数-每日运维

Log情况

测试MySQL8从库的relay_log_recovery参数-每日运维

停止sqlthread

测试MySQL8从库的relay_log_recovery参数-每日运维

插进去数据:

测试MySQL8从库的relay_log_recovery参数-每日运维

中继日志已经存在插入

测试MySQL8从库的relay_log_recovery参数-每日运维

模拟服务器崩溃丢失中继日志

测试MySQL8从库的relay_log_recovery参数-每日运维

开启服务器可 见重新生成了个空的,和一个新的

测试MySQL8从库的relay_log_recovery参数-每日运维

旧的日志破坏后生成了一个旧的和+1序号的新的log

测试MySQL8从库的relay_log_recovery参数-每日运维

观测新的log可以发现,旧的为空,而内容追加到了新的日志里面,进入数据库观测

反复卡在这个等待事件,尝试重启…

Waiting for handler commit

测试MySQL8从库的relay_log_recovery参数-每日运维

测试MySQL8从库的relay_log_recovery参数-每日运维

重启后发现日志到了07号,且数据已经加载到备库表

测试MySQL8从库的relay_log_recovery参数-每日运维

观察中继日志7,发现存在insert,且Read_Master_Log_Pos已经和Exec_Master_Log_Pos相等

测试MySQL8从库的relay_log_recovery参数-每日运维

测试MySQL8从库的relay_log_recovery参数-每日运维

为什么会出现那个等待事件呢?