码农日记

薄洪涛的个人博客

记录一次从日志中恢复mysql数据库数据

前因:有个大佬在update的时候,忘记加where条件,造成线上数据库中的某个状态值全部被修改,需要马上处理

首先面对这种情况,我马上想到的就是从二进制日志文件中恢复,马上查看是否开启了日志,确定开启了日志之后,松了一口气

操作步骤如下:

  1.  需要先锁表,确保数据被污染

lock tables xxx read

    2. 分析日志文件

[root@localhost mysql]# mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.000024 | grep -B 15 'set money = 501'

TIM截图20200719104649.png

   3. 找到记录之后,将操作转为sql文件

cat delete.txt | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' | sed -r 's/(@4.*),/\1;/g' | sed 's/@[1-9]=//g' > t1.sql

    4. 导入数据

source t1.sql

    5. 解锁

unlock table



发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

版权所有 | 转载请标明出处