问题描述
2020年,5月8日,备份了一次某项目的数据库。
5月29日,该项目的数据库被覆盖了。(也就是数据回到了5月8日)
期间没有任何备份,由于一些原因,需要找回丢失的数据。
解决方法
mysqlbinlog 提取sql记录 时间节点就是覆盖数据库之前的时间
先看看是否开启了mysql数据库日志(如果没开启,估计要杯具。)
登录服务器,进入mysql终端,输入如下命令
show variables like '%log_bin%';
可以看到,log_bin 是 ON
接下来找一找mysql 的安装目录
vi /etc/my.cnf
安装路径就是 /usr/local/mysql/var
cd /usr/local/mysql/var
查看一下,标红的文件可能就是你要操作的文件,
环境不同,文件名后缀也不一样
为了更直观,我用SFTP连到服务器,可以看到文件都是有修改日期的,
一般情况下 mysql-bin 文件
以5月27日的文件为例,mysql-bin.000062 63.84MG 那个
执行命令
cd /usr/local/mysql/bin/
./mysqlbinlog -d shop_qifenbao --stop-datetime='2020-5-29 6:00:01' /usr/local/mysql/var/mysql-bin.000062 >/recovery_62.sql;
说明,-d shop_qifenbao (-d 后面是数据库名称)–stop-datetime 后面是结束的时间节点 /usr/local/mysql/var/mysql-bin.000062 是要提取的文件 最后是导出到哪个文件
文件导出后,再下载到本地,进行数据恢复
去到本地mysql 的bin 目录,执行如下命令
mysql -uroot -p < d:\recovery\recovery_62.sql
到此数据就恢复到27号的
文件较多,一个一个来比较麻烦,可以合并文件后,再按上门的方法提取
cat mysql-bin.0000* > merge.sql
或者逐个文件合并
cat mysql-bin.000062 mysql-bin.000063 > merge.sql
要合并哪些文件,得看情况了 ,到此结束。