mysqlbinlog 工具的使用,大家可以看 MySQL 的帮助手册。里面有详细的用,在这个例子中,重点是--start-
position 参数和--stop-position 参数的使用。
·--start-position=N 从二进制日志中第 1 个位置等于 N 参量时的事件开始读。
·--stop-position=N 从二进制日志中第 1 个位置等于和大于 N 参量时的事件起停止读。
OK,现在开始,要启动二进制日志记录,要先在 my.cnf/my.ini 文件的 mysqld 里添加
log-bin=日志名
在这里,我的设置是 log-bin=liangck,然后再启动 mysql 服务,因为偶是用 windows 系统,所以执行 net start
mysql 命令即可。
然后在一测试数据库里,创建一个表,并添加记录。
mysql> create table test(id int auto_increment not null primary key,val int,data varchar(20));
mysql> insert into test(val,data) values(10,'liang');
Query OK, 1 row affected (0.03 sec)
mysql> insert into test(val,data) values(20,'jia');
Query OK, 1 row affected (0.08 sec)
mysql> insert into test(val,data) values(30,'hui');
Query OK, 1 row affected (0.03 sec)
mysql> flush logs; --产生第二个日志文件
Query OK, 0 rows affected (0.09 sec)
mysql> insert into test(val,data) values(40,'aaa');
Query OK, 1 row affected (0.05 sec)
mysql> insert into test(val,data) values(50,'bbb');
Query OK, 1 row affected (0.03 sec)
mysql> insert into test(val,data) values(60,'ccc');
Query OK, 1 row affected (0.03 sec)
mysql> delete from test where id between 4 and 5; --删除记录
Query OK, 2 rows affected (0.05 sec)
mysql> insert into test(val,data) values(70,'ddd');
Query OK, 1 row affected (0.03 sec)
mysql> flush logs; --产生第三个文件文件
Query OK, 0 rows affected (0.11 sec)
mysql> insert into test(val,data) values(80,'dddd');
Query OK, 1 row affected (0.05 sec)
mysql> insert into test(val,data) values(90,'eeee');
Query OK, 1 row affected (0.03 sec)
mysql> drop table test; --删除表
Query OK, 0 row affected (0.05 sec)
――――――――――――――――――――――――――――――――――
OK,现在测试数据已经建好了,要求是什么呢?就是将 test 表的数据全部恢复出来。
先用 mysqlbinlog 工具将日志文件生成 txt 文件出来分析。
~>mysqlbinlog liangck.000001 > G:.txt
~>mysqlbinlog liangck.000002 > G:.txt
~>mysqlbinlog liangck.000003 > G:.txt
通过这三个命令,可以在 G 盘下生成 3 个文件,里面分别记录了日志文件的内容,也就是用户操作的步骤。因为我
们需要重做第一个日志文件的所有操作,所以这里只需要将第一个日志文件全恢复就行了。
~>mysqlbinlog liangck.000001 | mysql -uroot –p
Ok,接着,我们需要分析的是第二个日志文件。为什么要分析它呢,因为它中途执行了一个操作是 DELETE,因为
我们要做的是恢复全部数据,也就是我们不希望去重做这个语句。所以在这里我们要想办法去绕开它。
我们先打开 002.txt 文件来分析一下。