收藏 分享(赏)

mysqlbinlog二进制日志.doc

上传人:tkhy51908 文档编号:7847624 上传时间:2019-05-27 格式:DOC 页数:6 大小:45KB
下载 相关 举报
mysqlbinlog二进制日志.doc_第1页
第1页 / 共6页
mysqlbinlog二进制日志.doc_第2页
第2页 / 共6页
mysqlbinlog二进制日志.doc_第3页
第3页 / 共6页
mysqlbinlog二进制日志.doc_第4页
第4页 / 共6页
mysqlbinlog二进制日志.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、mysqlbinlog 工具的使用 ,大家可以看 MySQL 的帮助手册。里面有详细的用,在这个例子中,重点是-start-position 参数和-stop-position 参数的使用。-start-position=N从二进制日志中第 1 个位置等于 N 参量时的事件开始读。-stop-position=N从二进制日志中第 1 个位置等于和大于 N 参量时的事件起停止读。OK,现在开始,要启动二进制日志记录,要先在 f / my.ini 文件的 mysqld 里添加log-bin=日志名在这里,我的设置是 log-bin=liangck然后再启动 mysql 服务,因为偶是用 windo

2、ws 系统,所以执行 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 affe

3、cted (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 O

4、K, 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

5、; -产生第三个文件文件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,现在测试数据已经建好了,要求是什么呢?

6、就是将 test 表的数据全部恢复出来。先用 mysqlbinlog 工具将日志文件生成 txt 文件出来分析。F:Program FilesMySQL_Datadatalogmysqlbinlog liangck.000001 G:001.txtF:Program FilesMySQL_Datadatalogmysqlbinlog liangck.000002 G:002.txtF:Program FilesMySQL_Datadatalogmysqlbinlog liangck.000003 G:003.txt通过这三个命令,可以在 G 盘下生成 3 个文件,里面分别记录了日志文件的内容,

7、也就是用户操作的步骤。因为我们需要重做第一个日志文件的所有操作,所以这里只需要将第一个日志文件全恢复就行了。F:Program FilesMySQL_Datadatalogmysqlbinlog liangck.000001 | mysql -uroot pOk,接着,我们需要分析的是第二个日志文件。为什么要分析它呢,因为它中途执行了一个操作是 DELETE,因为我们要做的是恢复全部数据,也就是我们不希望去重做这个语句。所以在这里我们要想办法去绕开它。我们先打开 002.txt 文件来分析一下。/*!40019 SET session.max_insert_delayed_threads=0*

8、/;/*!50003 SET OLD_COMPLETION_TYPE=COMPLETION_TYPE,COMPLETION_TYPE=0*/;DELIMITER /*!*/;# at 4#090427 15:27:56 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.32-community-log created 090427 15:27:56BINLOG fF71SQ8BAAAAZgAAAGoAAAAAAAQANS4xLjMyLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAAAAAAAAA

9、AAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC/*!*/;# at 106#090427 15:28:37 server id 1 end_log_pos 176 Query thread_id=1exec_time=0 error_code=0use mytest/*!*/;SET TIMESTAMP=1240817317/*!*/;SET session.pseudo_thread_id=1/*!*/;SET session.foreign_key_checks=1, session.sql_auto_is_null=1, ses

10、sion.unique_checks=1, session.autocommit=1/*!*/;SET session.sql_mode=1344274432/*!*/;SET session.auto_increment_increment=1, session.auto_increment_offset=1/*!*/;/*!C gbk */*!*/;SET session.character_set_client=28,session.collation_connection=28,session.collation_server=28/*!*/;SET session.lc_time_n

11、ames=0/*!*/;SET session.collation_database=DEFAULT/*!*/;BEGIN/*!*/;# at 176#090427 15:28:37 server id 1 end_log_pos 204 IntvarSET INSERT_ID=4/*!*/;# at 204#090427 15:28:37 server id 1 end_log_pos 312 Query thread_id=1exec_time=0 error_code=0SET TIMESTAMP=1240817317/*!*/;insert into test(val,data) va

12、lues(40,aaa)/*!*/;# at 312#090427 15:28:37 server id 1 end_log_pos 339 Xid = 12COMMIT/*!*/;# at 339#090427 15:28:46 server id 1 end_log_pos 409 Query thread_id=1exec_time=0 error_code=0SET TIMESTAMP=1240817326/*!*/;BEGIN/*!*/;# at 409#090427 15:28:46 server id 1 end_log_pos 437 IntvarSET INSERT_ID=5

13、/*!*/;# at 437#090427 15:28:46 server id 1 end_log_pos 545 Query thread_id=1exec_time=0 error_code=0SET TIMESTAMP=1240817326/*!*/;insert into test(val,data) values(50,bbb)/*!*/;# at 545#090427 15:28:46 server id 1 end_log_pos 572 Xid = 13COMMIT/*!*/;# at 572#090427 15:29:35 server id 1 end_log_pos 6

14、42 Query thread_id=1exec_time=0 error_code=0SET TIMESTAMP=1240817375/*!*/;BEGIN/*!*/;# at 642#090427 15:29:35 server id 1 end_log_pos 670 IntvarSET INSERT_ID=6/*!*/;# at 670#090427 15:29:35 server id 1 end_log_pos 778 Query thread_id=1exec_time=0 error_code=0SET TIMESTAMP=1240817375/*!*/;insert into

15、 test(val,data) values(60,ccc)/*!*/;# at 778#090427 15:29:35 server id 1 end_log_pos 805 Xid = 14COMMIT/*!*/;# at 805#090427 15:30:21 server id 1 end_log_pos 875 Query thread_id=1exec_time=0 error_code=0SET TIMESTAMP=1240817421/*!*/;BEGIN/*!*/;# at 875#090427 15:30:21 server id 1 end_log_pos 981 Que

16、ry thread_id=1exec_time=0 error_code=0SET TIMESTAMP=1240817421/*!*/;delete from test where id between 4 and 5/*!*/;# at 981#090427 15:30:21 server id 1 end_log_pos 1008 Xid = 15COMMIT/*!*/;# at 1008#090427 15:30:34 server id 1 end_log_pos 1078 Query thread_id=1exec_time=0 error_code=0SET TIMESTAMP=1

17、240817434/*!*/;BEGIN/*!*/;# at 1078#090427 15:30:34 server id 1 end_log_pos 1106 IntvarSET INSERT_ID=7/*!*/;# at 1106#090427 15:30:34 server id 1 end_log_pos 1214 Query thread_id=1exec_time=0 error_code=0SET TIMESTAMP=1240817434/*!*/;insert into test(val,data) values(70,ddd)/*!*/;# at 1214#090427 15

18、:30:34 server id 1 end_log_pos 1241 Xid = 16COMMIT/*!*/;# at 1241#090427 15:30:41 server id 1 end_log_pos 1282 Rotate to liangck.000003 pos: 4DELIMITER ;# End of log fileROLLBACK /* added by mysqlbinlog */;/*!50003 SET COMPLETION_TYPE=OLD_COMPLETION_TYPE*/;在这个文件中,我们可以看到 DELETE 的操作的起始位置是 875,终止位置是 10

19、08.那么我们只要重做第二个日志文件的开头到 875 的操作,然后再从 1008 到末尾的操作,我们就可以把数据给恢复回来,而不会 DELETE 数据。所以执行两个命令:F:Program FilesMySQL_Datadatalogmysqlbinlog liangck.000002 -stop-pos=875 | mysql -uroot -pF:Program FilesMySQL_Datadatalogmysqlbinlog liangck.000002 -start-pos=1008 | mysql -uroot -p mytestOK,现在第二个日志文件的数据了。第三个日志文件也是

20、同理,只要找到 DROP TABLE 的位置,就可以了。F:Program FilesMySQL_Datadatalogmysqlbinlog liangck.000003 -stop-pos=574 | mysql -uroot p现在我们再查一下数据看看:mysql select * from test;+-+-+-+| id | val | data |+-+-+-+| 1 | 10 | liang | 2 | 20 | jia | 3 | 30 | hui | 4 | 40 | aaa | 5 | 50 | bbb | 6 | 60 | ccc | 7 | 70 | ddd | 8 | 80 | dddd | 9 | 90 | eeee |+-+-+-+9 rows in set (0.00 sec)可以看到,全部数据都回来了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报