使用mysqlbinlog恢复误删除的表单

背景

昨天不小心把mysql中的一个数据库的用户表单删除了,天大的悲剧,于是想到用mysqlbinlog进行数据恢复。

原理

mysqlbinlog恢复数据库的原理就是将记录在binlog中的命令再运行一次。当然所有的前提是你已经打开了log_bin,按照这个逻辑,如果你是误删除或吴修改了某条数据,非常简单,只要找到对应的这条数据写一条逆向的sql语句就可以了,但是大部分删除都是不包含原数据的,这个比较悲催,就只能通过还原点来进行恢复,逻辑是通过mysqbinlog读取binlog中的数据,过滤误操作语句后并导出为sql文件,如果数据量不大也可以直接导出后查询到误删除的这一条,直接在sql文件中删除。然后再在服务器端导入即可

流程

信息收集

查看是否启用log_bin
show variables like 'log_%';

在这里插入图片描述
如果是on那就是打开了,如果没打开,请关闭本文。

查看所有日志文件
show master logs;
查看最新日志文件
show master status; 

为了便于分析 建议此处新建日志

flush logs;

具体操作

如果你是误操作后立马处理的一般误操作语句都在最新的binlog文件中,直接在里面找就可以了,如果不记得了,那就一个个找吧。
使用

/www/server/mysql/bin/mysqlbinlog -vv --base64-output=decode-rows -d dbname mysql-bin.0000023

此处我的mysql-bin.000005是我的最新日志文件,我就直接在这个日志文件中查询所有dbname这个数据库中的操作日志,如果找到了记录下该语句的操作点,等会要用到。例如我的误操作点在15863150和15863192之间,那就直接导出所有数据

/www/server/mysql/bin/mysqlbinlog -vv --base64-output=decode-rows --stop-position=15863150 -d dbname mysql-bin.000022 mysql-bin.000023 >/www/sl-01.sql

/www/server/mysql/bin/mysqlbinlog -vv --base64-output=decode-rows --start-position=15863192 -d dbname mysql-bin.000022 mysql-bin.000023 >/www/sl-02.sql

导出后在服务器端进行导入误操作点之前的数据

mysql -uroot -p <sl-01.sql 

在服务器端进行导入误操作点之后的数据

mysql -uroot -p <sl-02.sql 

建议

一定一定做好数据库备份工作

参考
B站:使用mysqlbinlog恢复数据库

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值