暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

使用binlog恢复MySQL误删除数据

爱学习de小馋猫 2020-01-19
972

binlog 只能恢复DML操作,不能恢复DDL操作,对于DDL操作还是只能用备份来恢复。


binlog是一个二进制日志文件,只存储变化的数据,不存储select和show,二进制文件不能直接打开,可以使用mysqlbinlog 打开,但是直接用mysqlbinlog 打开的文件不是一个可以直接执行的sql语句,为了找到我们可以直接执行的sql语句,需要借助一个python的工具。同时该工具还可以用来找回我们误删除的数据,我们最后得到的其实是删除前数据库里面所有数据的insert语句,后面的处理可以交给做了删除操作的人进行恢复。


接下来是一个误删除操作的处理过程:


1.安装python依赖【mysql-replication-0.13】【PyMySQL-0.7.11】【wheel-0.29.0】

使用root用户,cd到文件夹下面,然后执行:python setup.py install


下载地址:

https://github.com/danfengcao/binlog2sql

或者后台回复【binlog】获取依赖包


2.跟用户确认误删除具体时间+数据库IP地址+操作类型+具体数据库+具体的操作表


3.执行 恢复操作

根据用户提供的时间找到当时的binlog文件,这里找到的是mysql-bin.000008,用户操作的是test_ljing 数据库下的testclob表,时间是2019年12月31日10:50分之后,我们把导出的sql语句放在/root/binlog_python/insert.sql

然后执行下面的操作:

    python binlog2sql.py --flashback -uroot -p'mysql' -dtest_ljing -t testclob --start-file='mysql-bin.000008' --start-datetime='2019-12-31 10:50:00' > /root/binlog_python/insert.sql

    说明:此次误删除和恢复操作都是在12月31日当天做的。如果距离误删除操作过去时间比较久远,还需要考虑删除后数据库又进行了那些操作,确实是否要恢复。


    4.参数介绍:

    -B,--flashback:生成回滚语句

    --start-file:需要解析的binlog文件

    --start-position:解析binlog的起始位置

    --stop-position:解析binlog的结束位置

    --start-datetime:从哪个时间点的binlog开始解析,格式必须是datetime,例:2019-12-31 10:50:00

    --stop-datetime:从哪个时间点的binlog开始解析,格式同上

    -d,--databases:只输出目标db的SQL

    -t,--tables:只输出目标tables的SQL


    5.说明

    5.6版本的root用户有127.0.0.1,5.7版本没有,执行的时候如果用户不是%,会默认去找127.0.0.1这个IP的用户,所以在5.6版本可以直接用root用户执行,5.7版本需要加一个有所有权限的用户来执行这个操作,或者给root用户加一个127.0.0.1执行

    文章转载自爱学习de小馋猫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论