上一篇文章关于MySQL binlog二进制日志中,对binlog是什么,日志结构,如何查看等进行了介绍,本文介绍如何将使用binlog进行数据恢复。
清空binlog,便于后续测试:
- reset master
-
对数据库进行更新操作:
- mysql > create database test;
- mysql > use test;
-
- mysql > create table test001(id int,name varchar(10));
-
- mysql > insert into test001 values(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e');
-
-
以上这些操作会记录到mysql-bin.000001文件中。
接着,执行flush logs,强制重新创建一个binlog文件。
- mysql > flush logs;
-
继续执行SQL进行数据变更操作:
- mysql > delete from test001 where id=4; //模拟误操作,删除数据
-
- mysql > create table test002(id int,name varchar(10));
-
- mysql > insert into test002 values(101,'A'),(102,'B'),(103,'C'),(104,'D'),(105,'E');
-
-
以上操作会记录到mysql-bin.000002文件中。
查看日志文件
- >show binary logs;
- +------------------+-----------+
- | Log_name | File_size |
- +------------------+-----------+
- | mysql-bin.000001 | 1088 |
- | mysql-bin.000002 | 899 |
- +------------------+-----------+
- 1 row in set (0.01 sec)
-
查看binlog文件,从中找到delete语句所在的位置。
- # mysqlbinlog -v mysql-bin.000002
-
假设delete事件开始position是287,事件结束position是413。
从binlog中提取sql操作,需要跳过故障点:
- mysqlbinlog /var/lib/mysql/mysql-bin.000001 > mysql-bin.sql
-
- mysqlbinlog /var/lib/mysql/mysql-bin.000002 --stop-position=287 > 287.sql
-
- mysqlbinlog /var/lib/mysql/mysql-bin.000002 --sart-position=413 > 413.sql
-
删除test数据库
- mysql > drop database test;
-
使用日志进行恢复时,需要依次进行,即最早生成的日志文件要最先恢复。
- mysql -uroot -p123456 < mysql-bin.sql
-
- mysql -uroot -p123456 < 287.sql
-
- mysql -uroot -p123456 < 413.sql
-
到此,数据恢复完成。