MySQL 从库Crash后重启时复制出错的问题

2019-08-07  本文已影响0人  斜不靠谱

背景

MySQL从库因为机器卡顿原因,重启机器,机器起来后需要重新启动从库
结果开启同步后报错

Last_SQL_Error: Could not execute Delete_rows event on table pay_gateway.tbl_accounting_notifyinfo; Can't find record in 'tbl_accounting_notifyinfo', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.003660, end_log_pos 66840371

原因分析

参数 存储在FILE中 存储在table中
sync_relay_log 默认为10000 ,即每10000 次sync_relay_log events会刷新到磁盘(using fdatasync())。为0 则表示不刷新,交由OS 的cache 控制。大于0 则表示N个events写到Relay log后,刷到磁盘.IO线程复制到缓存后写入磁盘
sync_master_info 当设置为0 ,则与events无关,由OS处理;如果大于0,则表示在sync_master_info次transactions后刷到磁盘,默认为10000 次刷新到磁盘 当设置为0 ,则表不做任何更新,设置为1 ,则每次事件会更新表 # 默认为10000
sync_relay_log_info 当设置为0 ,交由OS 刷新磁盘;如果大于0,则sync_relay_log_info次transactions后刷到磁盘.默认为10000 次刷新到磁盘 INNODB 存储(支持事务),则无论为任何值,则都每次event 都会更新表(无论此参数值为多少)。 如果是非事务存储引擎,则为0时不更新表,大于0时则在N次events后更新.默认值都是10000

mysql> select Master_log_name,Master_log_pos,'IO Thread 读取Master的positon' comments from mysql.slave_master_info
    union select Master_log_name,Master_log_pos,'SQL Thread 执行Master的positon' comments from mysql.slave_relay_log_info;

解决问题

延伸问题

如果mysql.slave_master_info 的记录的点要比mysql. slave_relay_log_info点大 机器意外crash,重启后依然会有错误

问题分析

解决方法

解决方案汇总

上一篇 下一篇

猜你喜欢

热点阅读