场景:误清除了某系统内凌晨5点-下午18点所有的数据记录
系统为vue+springboot前后端分离项目,数据库为mysql版本8.0.22,linux
第一步:停止系统后台,寻找mysqlbinlog文件位置
binlog一般就在mysql安装目录下mysqldb中(前提是开启了binlog日志功能):
先找 “binlog” 为关键字的文件
因为binlog日志文件是二进制文件,需要mysql的自带的mysqlbinlog工具进行转码
使用以下命令转换指定时间段的binlog日志为可阅读的sql文件
先进入mysql安装目录下的bin目录
cd /usr/local/mysql/bin
执行以下命令(需要替换下面提到的参数)
mysqlbinlog --no-defaults -v --base64-output=decode-rows --database={数据库名称} --start-datetime="2023-11-30 05:00:00" --stop-datetime="2023-11-30 18:00:00" /usr/local/mysql/mysqldb/binlog.000026 > log1.txt
--database= #被误清除的数据库名称
--start-datetime="2023-11-30 05:00:00" #起始时间 早上凌晨五点
--stop-datetime="2023-11-30 18:00:00" #停止时间 下午六点
导出了log文件之后可以进行第二步
第二步,通过查找日志的起始pos点来恢复指定时间段数据
打开导出的log.txt文件如下图:
重点看两个部分一个是时间 红框中 231130 5:00:02是5点的操作记录
第二个at为日志点位 pos (这个是恢复最终重要收集的信息)
之前导出时设置了时间段所以此处只需要找到第一个业务操作sql的pos点位
然后再找到log结尾时间点的pos点位(如下图)
第三步 恢复数据
把刚刚收集的两个点位结合下面的命令,开始恢复数据库
先进入mysql安装目录下的bin目录
cd /usr/local/mysql/bin
以指定pos节点恢复数据
mysqlbinlog --no-defaults -v /usr/local/mysql/mysqldb/binlog.000026 --start-position=510879666 --stop-position=521877693 | mysql -u root -p
--no-defaults 防止出现编码异常的问题
/usr/local/mysql/mysqldb/binlog.000026 替换成binlog的实际目录
--start-position=510879666 #开始节点
--stop-position=521877693 #结束节点
执行完需要输入数据库密码,此过程较慢耐心等待,没有返回消息就是好消息
最后恢复成功,数据库整体恢复到18点的状态,业务正常