我把数据库给删了-mysql删库数据恢复

迁服务器的时候需要重装云盘,在新建新的数据库时,很果断的就把博客的数据库给删掉了。。不知道当时自己在想些什么。。
今下午才发现博客报了数据库连接错误,重启了几遍数据库后都没变化,查了一下后就懵了。要删掉的网盘数据库还留在那,博客数据库没了。。。
于是一番纠结后就开始尝试恢复被删掉的库里的数据,首先想到要去找mysql的二进制日志,然后回滚。毕竟博客也没有特别大数据量,应该是可以找到具体的时间点的。
先在mysql上找到自己的日志文件名

mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |       461 | No        |
| binlog.000002 |   1360813 | No        |
| binlog.000003 |      1393 | No        |
+---------------+-----------+-----------+
10 rows in set (0.06 sec)

因为日志的储存位置不确定,所以直接用find搜索一下日志名,找到位置。

find / -name binlog.000001

然后直接vim打开就能看到之前执行过的sql记录
2020-02-17.png
我的数据库是utf8编码,所以记录里的乱码大概就是插入或者修改的内容。因为是博客,所以文字类的记录占比比较大,几千条记录很难找到想要回滚的点,于是我直接把vim的编码也换成了utf-8。
找到vimrc文件

find / -name vimrc

在结尾添加

 set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
 set termencoding=utf-8
 set encoding=utf-8

再次打开日志就能看到之前插入的文字了,可以结合sql语句来判断需要回滚恢复的范围。
然后执行回滚

mysqlbinlog --stop-position="102" --start-position="367" binlog.000002

start-position和stop-position分别是回滚在日志里的开始位置和结束位置,最后是要回滚的日志文件。也可以用开始时间和结束时间来执行回滚。

mysqlbinlog --start-datetime="2018-04-20 10:01:00" --stop-datetime="2005-04-21 10:01:00" mysql-bin.000001

完成后,之前删除的内容就被恢复了

留下你的评论