本文最后更新于 2024-07-06,文章内容可能已经过时。

因为自己手误导致图床的数据库中所有表数据全部清空,通过百度通过简单的命令成功恢复数据库数据。

恢复数据是全量恢复,就是所有的库所有的表都会进行恢复,因为我的数据不是很多,完全够用了。有需要的可以重新查找资料

因为学习数据库的时候都会学到MySQL的三大日志:binlog、redolog和undolog。其中binlog日志是记录数据库写入操作的二进制信息,所以这里很明显可以直接通过binlog日志进行恢复。

首先要查看数据库是否已经开启了binlog日志,这里默认都是打开的。

show variables like '%log_bin%';

image-20220908210644709

前往MySQL的数据目录,默认目录为:/var/lib/mysql

cd /var/lib/mysql
ls -l

image-20220908210853149

从最新的binlog日志开始查询,也可以等价于后面数字最大的文件。

mysqlbinlog --no-defaults --base64-output=decode-rows -v binlog.000003 > /root/003.sql

查找一下生成的文件,寻找需要恢复的时间节点。

image-20220908212037337

通过查找,我们是需要将数据恢复到2022-08-27 02:42:53时间之前,在binlog.000003文件中找到。所以需要将binlog.000001、binlog.000002、binlog.000003中2022-08-27 02:42:53之前的数据。

mysqlbinlog --no-defaults --skip-gtids=true --stop-datetime="2022-08-27 02:42:52" binlog.000001 | mysql -f -u 数据库用户 -p数据库密码
mysqlbinlog --no-defaults --skip-gtids=true --stop-datetime="2022-08-27 02:42:52" binlog.000002 | mysql -f -u 数据库用户 -p数据库密码
mysqlbinlog --no-defaults --skip-gtids=true --stop-datetime="2022-08-27 02:42:52" binlog.000003 | mysql -f -u 数据库用户 -p数据库密码

执行完成后重新查看数据库,发现数据已经恢复完成。