【MySQL】binlog 找回数据

217 阅读1分钟

场景:本地连线上接口,误操作把一个重要信息删掉了。想要恢复,怎么办?

思路分析

需求: 只需要恢复某行记录的某一个字段,并不需要整个库的回滚。

现况: 该系统没有任何数据备份以及操作日志详情的记录,只有报错记录的日志。

解决: 只能寄希望于 binlog

操作步骤

确认开启 binlog

执行 show variables like 'log_bin';

看到 log_bin : ON 就放心了

查看 binlog 文件路径

找到 MySQL 的配置文件 find / -name my.cnf

发现 datadir=/var/lib/mysql

关键命令
cd /var/lib/mysql

# --no-defaults --base64-output=decode-rows -v 让binlog可读,不然看不懂
# --start-datetime="2021-10-08 12:00:00" --stop-datetime="2021-10-08 13:00:00" 筛选 binlog  时间范围
# binlog.000001 binlog 文件名称
# -d 对应的数据库名称
mysqlbinlog --no-defaults --base64-output=decode-rows -v --start-datetime="2021-10-08 12:00:00" --stop-datetime="2021-10-08 13:00:00" binlog.000001 -d database_name > /tmp/database_name.sql

打开 /tmp/database_name.sql,我便找到了那行记录那个字段之前的记录。从此再也不怕误操作找不回数据了😄。

通过 binlog 恢复数据还有更多方式,更多方式请查看官网 || 其他博文