mysql 误删表 恢复数据_MySQL误删数据或者误清空表恢复

前提:

确认MySQL server开启了binlog,设置了以下参数:

[mysqld]

server-id = 1

log_bin = /var/log/mysql/mysql-bin.log

max_binlog_size = 100M

binlog-format = row

没有开启的话,那真的无法快速回滚,以下方法不适用。

一、 情形1: 使用第三方工具

这里以第三方工具Navicat为例,注意,请查看第三方客户端是否有日志功能

ad93b3f5eb81ffca1b4708fb66429ca7.png

1. 误删几条记录

可以直接从日志读取相关记录,手动转化为insert语句

2. 误删整张表表

也就是点击了清空表,这也是本次遇到的问题,在日志里只有DELLECT from TableName日志,没有详细的行记录,需要使用情形2的方法,日志如图:

8a849265ebb4d585ae67f0e716d8b55e.png

如图,误删了一张表,然后刷新发现里边啥都没有了。一脸懵逼o((⊙﹏⊙))o

二、 情形2: 没有客户端,直接命令行删除了整张表

cf1b235fea07269df4468498dcb53529.png

如果是直接使用了命令,或者其他语言接口,难以找到操作日志,那么情形1的两种方法都需要利用binlog2sql快速闪回。

Github链接:binlog2sql,具体使用方法在readme中已经有了很详细的说明,以下试我的使用过程:

步骤一:查找binlog

show master status;

37bad3822707cd3a3237e3059ff0b7f5.png

找到binlog路径,默认在这个文职,否则看数据库配置的里手动设定的存储路径:

700b8a5fbd124e6c5335050205919033.png

步骤二:安装binlog2sql数据恢复工具

binlog2sql是一款简单易用的binlog解析工具,其中一个功能就是生成回滚SQL。

git clone https://github.com/danfengcao/binlog2sql.git

cd binlog2sql

pip install -r requirements.txt

我测试2.7后续操作会报错,后来换成了python3.7,测试通过。python环境建议直接用python3.

环境准备好后,把上一步查到的最新binlog复制到项目目录下,如图:

854233e4872684aed1b6dcee1e214bb4.png

到此准备工作完毕

步骤三: 开始模糊查询,并定位范围

想办法回想误删的时间点,开始用起始时间和结束时间模糊查询,找到误删的位置

如果是用了第三方工具,可以直接从日志里找删除时间,如图我的误删时间是[2021-01-07 15:11:49.054]

dac80653f8f702eafc59e89c4eb1ea89.png

然后运行命令,解析binlog,定位并确认误删的位置。

python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dDatabaseName -tTableNameDeleted --start-file='binlog.000007' --start-datetime='2021-01-07 15:11:48' --stop-datetime='2021-01-07 15:11:50''

这里注意替换相应的数据库配置和数据库名称、待查询的表名称

46c899e4efedc7959f96eb0d13328368.png

操作的结果是详细的操作每条记录的语句。这一步可以修改起始结束时间重复操作,直到只有我们误删的记录。 然后随便找一条误删的记录,注意后面的注释:

e786e7e2a30dce59ac72f654bfc798e5.png

最终,我们可以得到误操作的sql语句序号是图中的start(24908391) 到 end(24920250 )的范围。

步骤四:将误删的SQL语句转化为insert语句

-python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' dDatabaseName -tTableNameDeleted --start-file='binlog.000007' --start-position=24908391 --stop-position=24920250 -B > rollback.sql | cat

其中数据库等配置同上,start-position和stop-position替换成刚刚我们查出的start(24908391) 和 end(24920250 )值.

然后我们会得到插入语句rollback.sql,如图:

73ba3e31d84c2577e8c0bdc2ecff40a6.png

之后执行这些插入语句就可以恢复啦。结束

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值