有时候直接操作数据库,可能会出现误删除一些数据的情况,比如删了某个表中某一行数据,事后发现该条数据是误删的,还需要恢复,但是又不太记得具体每个字段原来的数据是什么了,只能要查到之前删掉的数据每个字段值都是什么,才能恢复数据,这时候,就需要查找操作日志,找到之前做的删除操作,把数据重新恢复。
1. 首先,要找到mysql的日志文件存放在服务器的哪个路径。可以用以下命令来找到日志所在:
2. 去数据库所在服务器,找到所在时间段的log(误删数据的那个时间段),记住文件路径和名字:
3. 进入到数据库安装路径的bin路径下
4. 使用如下命令,拿出对应时间段的log:
mysqlbinlog --no-defaults --database=XXX --start-datetime="2021-06-22 09:18:00" --stop-datetime="2021-06-22 09:40:00" /data/mysql/binlogs/mysql-bin.000027 | grep jiraissue > jira_opt.txt
上面命令中, --database=XXX 填写自己的库名,grep jiraissue > jira_opt.txt 是做下初步筛查,比如我知道自己是误删除的 jiraissue这个表的数据,就只把这些相关的数据搜出来,放到自定的jira_opt.txt文本文件中。
5. 打开txt文件,根据起止时间,找一个标志点:
6. 运行如下命令,导出SQL语句:
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v --start-position=970222536 --stop-position=973499062 --database=jiradb /data/mysql/binlogs/mysql-bin.000027 > restore11.sql
7. 从导出的SQL语句中,查看自己删除的那条数据
8. binlog2sql可以将binlog进行反向解析(可自行搜索方法)。
或者数据量不大的话,直接自己反写一下,在SQL执行即可。