原创

[mysql]记录一次误删整表数据并且恢复的操作

前言

事情发生在昨天,因为大周末的,学点python,用python做的一个静态html代码生成工具,原理很简单,采集数据后,落库,之后遍历数据,生成html.

边看剧边撸代码真的是万恶之源,一不小心,删除了9万行数据.下图.

这张表作为附加表,生成html是必须要用的.出事情后,果断开始恢复记录过程.

解决思路

  1. 确定mysql开启了binlog.
  2. 确定记录操作时间
  3. 编写脚本导出记录.
  4. 编写导入脚本

解决过程

1.确定mysql开启了binlog

mysql> show variables like'log_bin%';
+---------------------------------+-----------------------------+
| Variable_name | Value                       | +---------------------------------+-----------------------------+ | log_bin                         | ON |
| log_bin_basename | /var/lib/mysql/binlog       | | log_bin_index                   | /var/lib/mysql/binlog.index |
| log_bin_trust_function_creators | OFF                         | | log_bin_use_v1_row_events       | OFF |
+---------------------------------+-----------------------------+
5 rows in set (0.01 sec)
mysql>

确定记录操作时间

因为我sql执行上面有时间,所以可以明确时间

编写脚本导出记录

mysqlbinlog --base64-output=DECODE-ROWS -v -d dbname --start-datetime '2022-05-30 14:48:00' /var/lib/mysql/binlog.0000* > www.sql

脚本很简单,--base64-output=DECODE-ROWS代表,log里面base64码转成了可阅读的方式..写入到www.sql文件中.

编写导入脚本

因为www.sql里面包含了很多乱七八糟的东西,而我delete其实很好就找到了pos

如下图

将delete之前的代码都删了
然后找到最后一条delete的记录,将最后的其他数据都删除了

之后就是记录的调整了,这个最好用比较好的编辑器就可以调整了.
改成insert即可.比如我下面.

使用命令mysql -uroot -p -f dbname < www.sql,输入密码即可

温馨提示:
本文最后更新于 2022年05月30日,已超过 38 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
本文目录