binlog缺失下mysql主从恢复方案
一、问题发生背景
项目准生产环境,数据库使用的是mysql,版本号为8.0.30,部署方案采用主从结构(一主两从),binlog有效期为2天,在巡检的过程中发现其中一个从节点数据库状态异常。
二、 问题初步分析
从直观的报错信息可以发现,问题发生在问题应该发生在mysql-bin.000289,position位置为241494的地方。
进入主节点数据文件路径下,发现mysql-bin.000289已经不存在了,而且最小的一个binlog文件编号距离000289缺失了多个binlog文件。
可能出现binlog文件缺失的原因有以下几个:
- 主从网络异常,主从复制中断,数据未及时从主节点同步到从节点,又恰巧binlog文件过了有效期被系统删除。
- 从库上有数据更新操作,主库数据同步过去后发生异常。
- 人工误删了binlog文件。
三、选择解决方案
由于在mysql主从架构中,缺少了从节点依赖的binlog文件,导致主从数据差异较大,缺少的binlog文件中可能含有一些数据dml和ddl操作,无法直接跳过缺少的binlog日志文件,只能选择清空从库,重新从主节点同步数据,有以下两个方案备选。
方案1:
1、操作步骤
(1) 通过命令:show master status\G,查看主节点当前最新的binlog位置信息,并记录好。
(2) 清空从库数据,使用stop slave命令切断主从联系。
(3) 主节点锁定数据同步用户和所有的数据库,暂停数据业务操作,然后使用mysqldump命令导出主节点的所有数据库。