利用binlog恢复mysql误删数据

32F  2018/10/15 mysql



前言

  案件起因是为了删一张表的一个字段数据,选中了所有行按了【delete】键,结果删了整张表所有数据......后来在tony老师的引导下用了binlog恢复了所有数据,感激!


binlog是什么?

 1.binlog是一个二进制格式的文件,记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
 2.默认情况下,binlog日志是二进制格式的,不能使用查看文本工具的命令(比如,catvi等)查看,而使用mysqlbinlog解析查看。
 3.二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。

binlog的作用?

 1.当有数据写入到数据库时,还会同时把更新的SQL语句写入到对应的binlog文件里,这个文件就是上文说的binlog文件。使用mysqldump备份时,只是对一段时间的数据进行全备,但是如果备份后突然发现数据库服务器故障,这个时候就要用到binlog的日志了。
 2.主要作用是用于数据库的主从复制及数据的增量恢复。

处理步骤

1.确认开启binlog日志

  vim /etc/mysql.cnf --查看mysql配置文件

  在[mysqld]区块设置/添加 log-bin = mysql-bin 确认是打开状态,如果未开启,在此gg或重启mysqld(service mysqld restart) 使其生效。

2.寻找mysql二进制文件

  通过show binary logs可以查看到日志系统存在的文件,目前我的mysql 服务自开启binlog后重启了两次,所以有2个binlog文件;

_20181015110619.png

  接下我是通过find / -name 'mysql-bin.000005'找到了日志文件的路径,这里有指导配置点的可以留下言~

3.二进制转为sql文件

  a.利用mysqlbinlog命令将二进制文件转为sql文件, -d dbname是只转数据库dbname的数据

  mysqlbinlog -d dbname mysql-bin.000005 >first.sql

  mysqlbinlog -d dbname mysql-bin.000006 >second.sql

  b.vim second.sql查询到sql内容 _20181015112611.png

  c.这时候怎么利用sql文件怎么修复呢?如果是少量数据,直接查找新建时的sql语句手动执行即可,但这次博主被删的是几十条的博文和问答,数据相对较多,不可能一条条手动恢复?

  d.这里我可以将sql调整到删除数据之前:mysqlbinlog -d dbname--stop-position="11445088" mysql-bin.000006 >second.sql

  e.然后导入first.sql 和second.sql 两个文件,所有数据都恢复如初了~


参考文章

https://www.cnblogs.com/hanyifeng/p/5756462.html

https://www.cnblogs.com/dadonggg/p/8617826.html


添加评论
全部回复
1f 32F  2019-03-02 14:36:37

mysqldump -uroot -p xxroom > /data/xxroom.sql 数据库备份回复


2f xc_ccc  2019-03-02 15:45:51

66666666666回复


3f 32F  回复 xc_ccc 2019-03-04 18:00:06

大佬光临,蓬荜生辉回复