binlog_format='mixed'
  1. (root@g1-db-test-v01:3306)[(none)]>use test;
  2. Reading table information for completion of table and column names
  3. You can turn off this feature to get a quicker startup with -A
  4.  
  5. Database changed
  6. (root@g1-db-test-v01:3306)[test]>update db1.t2 set name='haha' where id=105;
  7. Query OK, 1 row affected (0.00 sec)
  8. Rows matched: 1 Changed: 1 Warnings: 0
  9.  
  10. (root@g1-db-test-v01:3306)[test]>use db1;
  11. Reading table information for completion of table and column names
  12. You can turn off this feature to get a quicker startup with -A
  13.  
  14. Database changed
  15. (root@g1-db-test-v01:3306)[db1]>delete from test.t1 where id=11;
  16. Query OK, 1 row affected (0.02 sec)
 
假如使用mysqlbinlog恢复db1的数据,命令加上参加 -d :
mysqlbinlog -d db1 test-mysql-bin.000115 > 115d.sql
 
  1. /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
  2. /*!40019 SET @@session.max_insert_delayed_threads=0*/;
  3. /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
  4. DELIMITER /*!*/;
  5. # at 4
  6. #170809 15:38:35 server id 1882073306 end_log_pos 120 CRC32 0x9c11ffa3 Start: binlog v 4, server v 5.6.23-72.1-log created 170809 15:38:35
  7. # Warning: this binlog is either in use or was not closed properly.
  8. BINLOG '
  9. +7uKWQ/aKC5wdAAAAHgAAAABAAQANS42LjIzLTcyLjEtbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  10. AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAaP/
  11. EZw=
  12. '/*!*/;
  13. # at 120
  14. #170809 15:39:20 server id 1882073306 end_log_pos 198 CRC32 0x58ea2e3a Query thread_id=75 exec_time=0 error_code=0
  15. SET TIMESTAMP=1502264360/*!*/;
  16. SET @@session.pseudo_thread_id=75/*!*/;
  17. SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
  18. SET @@session.sql_mode=1073741824/*!*/;
  19. SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
  20. /*!\C utf8 *//*!*/;
  21. SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
  22. SET @@session.lc_time_names=0/*!*/;
  23. SET @@session.collation_database=DEFAULT/*!*/;
  24. BEGIN
  25. /*!*/;
  26. # at 198
  27. # at 313
  28. #170809 15:39:20 server id 1882073306 end_log_pos 344 CRC32 0xb2671190 Xid = 32389
  29. COMMIT/*!*/;
  30. # at 344
  31. #170809 15:41:05 server id 1882073306 end_log_pos 422 CRC32 0x4befc6fe Query thread_id=75 exec_time=0 error_code=0
  32. SET TIMESTAMP=1502264465/*!*/;
  33. BEGIN
  34. /*!*/;
  35. # at 422
  36. #170809 15:41:05 server id 1882073306 end_log_pos 526 CRC32 0x2b0ef4d4 Query thread_id=75 exec_time=0 error_code=0
  37. use `db1`/*!*/;
  38. SET TIMESTAMP=1502264465/*!*/;
  39. delete from test.t1 where id=11
  40. /*!*/;
  41. # at 526
  42. #170809 15:41:05 server id 1882073306 end_log_pos 557 CRC32 0xb34d26a0 Xid = 32473
  43. COMMIT/*!*/;
  44. DELIMITER ;
  45. # End of log file
  46. ROLLBACK /* added by mysqlbinlog */;
  47. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
  48. /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
  49. (END)

上面的binlog只记录了 delete from test.t1 where id=11

 
描述这样一种场景,上述案例本想恢复update那一条数据,结果只能恢复delete那一条。
而delete的却是test库的表,如果在测试环境进行恢复,因只需恢复db1,没有创建test库,则恢复时会报错,恢复终止。
 
也就是说,在binlog_format='statement/mix'时,如果mysqlbinlog 不加 --database(-d)参数,解析的binlog里记录所有变更sql。但如果增加了 --database db1,则只记录use db1后面的变更sql
 
这样有一个问题,如果db1里的一张表 t1被删除了,我们想恢复。按照一般方法,是先使用最近备份恢复db1所有数据(因为按库备份),然后使用mysqlbinlog恢复db1的数据到drop t1前一刻,此时使用mysqlbinlog 如果加了 --databae=db1,那在有跨库操作的情况下,会遗漏部分sql;而如果不加 --database=db1,那就更没法恢复了,因为之前只使用了db1的备份先恢复的,也就是只恢复了db1。综上,不加--database的话,就要将所库都先恢复一遍,然后使用mysqlbinlog不加参数继续恢复。
 
当设置row模式时,则不存在这种问题。
binlog_format='row'

  1. (root@g1-db-test-v01:3306)[(none)]>use test;
  2. Reading table information for completion of table and column names
  3. You can turn off this feature to get a quicker startup with -A
  4.  
  5. Database changed
  6. (root@g1-db-test-v01:3306)[test]>update db1.t2 set name='hehe' where id=105;
  7. Query OK, 1 row affected (0.00 sec)
  8. Rows matched: 1 Changed: 1 Warnings: 0
  9.  
  10. (root@g1-db-test-v01:3306)[test]>use db1;
  11. Reading table information for completion of table and column names
  12. You can turn off this feature to get a quicker startup with -A
  13.  
  14. Database changed
  15. (root@g1-db-test-v01:3306)[db1]>delete from test.t1 where id=10;
  16. Query OK, 1 row affected (0.02 sec)
 
mysqlbinlog --base64-output=decode-rows -vv -d db1 test-mysql-bin.000116 > 116d.sql
 
  1. /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
  2. /*!40019 SET @@session.max_insert_delayed_threads=0*/;
  3. /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
  4. DELIMITER /*!*/;
  5. # at 4
  6. #170809 16:28:12 server id 1882073306 end_log_pos 120 CRC32 0x6c11777a Start: binlog v 4, server v 5.6.23-72.1-log created 170809 16:28:12
  7. # Warning: this binlog is either in use or was not closed properly.
  8. # at 120
  9. #170809 16:28:51 server id 1882073306 end_log_pos 192 CRC32 0x256a9f3c Query thread_id=78 exec_time=0 error_code=0
  10. SET TIMESTAMP=1502267331/*!*/;
  11. SET @@session.pseudo_thread_id=78/*!*/;
  12. SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
  13. SET @@session.sql_mode=1073741824/*!*/;
  14. SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
  15. /*!\C utf8 *//*!*/;
  16. SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
  17. SET @@session.lc_time_names=0/*!*/;
  18. SET @@session.collation_database=DEFAULT/*!*/;
  19. BEGIN
  20. /*!*/;
  21. # at 192
  22. #170809 16:28:51 server id 1882073306 end_log_pos 246 CRC32 0x285d8d5d Table_map: `db1`.`t2` mapped to number 395
  23. # at 246
  24. #170809 16:28:51 server id 1882073306 end_log_pos 366 CRC32 0xb84daa2e Update_rows: table id 395 flags: STMT_END_F
  25. ### UPDATE `db1`.`t2`
  26. ### WHERE
  27. ### @1=105 /* INT meta=0 nullable=0 is_null=0 */
  28. ### @2='haha' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
  29. ### @3='57747ab889255af96b48d65e505382' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
  30. ### @4='' /* VARSTRING(72) meta=72 nullable=0 is_null=0 */
  31. ### @5=NULL /* VARSTRING(72) meta=0 nullable=1 is_null=1 */
  32. ### SET
  33. ### @1=105 /* INT meta=0 nullable=0 is_null=0 */
  34. ### @2='hehe' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
  35. ### @3='57747ab889255af96b48d65e505382' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
  36. ### @4='' /* VARSTRING(72) meta=72 nullable=0 is_null=0 */
  37. ### @5=NULL /* VARSTRING(72) meta=0 nullable=1 is_null=1 */
  38. # at 366
  39. #170809 16:28:51 server id 1882073306 end_log_pos 397 CRC32 0x74a5b1df Xid = 32558
  40. COMMIT/*!*/;
  41. # at 397
  42. #170809 16:29:07 server id 1882073306 end_log_pos 468 CRC32 0x66079b66 Query thread_id=78 exec_time=0 error_code=0
  43. SET TIMESTAMP=1502267347/*!*/;
  44. BEGIN
  45. /*!*/;
  46. # at 468
  47. # at 519
  48. # at 567
  49. #170809 16:29:07 server id 1882073306 end_log_pos 598 CRC32 0xb3ffd246 Xid = 32583
  50. COMMIT/*!*/;
  51. DELIMITER ;
  52. # End of log file
  53. ROLLBACK /* added by mysqlbinlog */;
  54. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
  55. /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
  56. (END)

binlog_format不同模式下,对mysqlbinlog恢复的影响的更多相关文章

  1. CentOS下利用mysqlbinlog恢复MySQL数据库

    如果不小心对数据库进行误操作,而又没有及时备份怎么办?这恐怕是广大的coder经常遇到的一类问题.我今天就因为不小心删除了某个数据库,但最后的备份是1个礼拜前的,唯一能解决的办法就是通过mysqlbi ...

  2. 使用 “恢复模式” 或 “DFU 模式” 来更新和恢复 iOS 固件

    请访问原文链接:https://sysin.org/article/apple-ios-dfu/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sysin ...

  3. Oracle在归档模式下恢复

    =============== 数据库的完全恢复 =============== 在归档模式下数据库完全恢复时,数据库所经过的状态如下: 1.利用备份修复(Restores)损坏或丢失的数据文件,即将 ...

  4. 非归档模式下使用Rman进行备份和恢复

    实验环境: 一.首先进行全库数据备份: 在非归档模式下,rman备份需要在mount模式下进行 SQL> select status from v$instance; STATUS ------ ...

  5. sql server 备份与恢复系列三 简单恢复模式下的备份与还原

    一.概述 前面讲了备份的一些理论知识,这篇开始讲在简单恢复模式下的备份与还原.在简单模式下是不能做日志备份的,发生灾难后,数据库最后一次备份之后做的数据修改将是全部丢失的,所以在生产环境下,数据又很重 ...

  6. 使用alter database datafile 'XXX' offline drop 是否能够恢复(非归档模式下)

    今天在群里面听到一位网友在说使用了alter database datafile 'XXX' offline drop命令是否能够恢复数据,在非归档模式下,下面是用一个实验来验证一下 ######## ...

  7. oracle非归档模式下的冷备份和恢复

    查看归档的相关信息 SQL> archive log list数据库日志模式             非存档模式自动存档             禁用存档终点            USE_DB ...

  8. 浅谈SQL Server中的事务日志(四)----在完整恢复模式下日志的角色

    简介 生产环境下的数据是如果可以写在资产负债表上的话,我想这个资产所占的数额一定不会小.而墨菲定律(事情如果有变坏的可能,无论这种可能性有多小,它总会发生)仿佛是给DBA量身定做的.在上篇文章介绍的简 ...

  9. 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色

    简介 在简单恢复模式下,日志文件的作用仅仅是保证了SQL Server事务的ACID属性.并不承担具体的恢复数据的角色.正如”简单”这个词的字面意思一样,数据的备份和恢复仅仅是依赖于手动备份和恢复.在 ...

随机推荐

  1. 018 cisco 3560 MAC地址绑定

    在3560交换机上show ip dhcp binding 可以看到通过DHCP服务广播出去的IP地址与MAC地址的对应表: 比如: Switch#show ip dhcp binding IP ad ...

  2. C#.NET 如何快速输入一个对象事件对应的方法

    直接在Textbox图像对象中找到这个对象的KeyPress方法,然后输入触发的事件名称.效率更高,不容易出错. "void TypeAreaKeyPress(object sender, ...

  3. Struts2.3动态调用报 No result defined for action 错误

    struts 2.3.16  採用动态调用发现不工作报404 not found,网上查找原因: 1.由于:struts2中默认不同意使用DMI 所以:须要在配置文件里打开: <constant ...

  4. ViewPager学习之仿微信主界面

    由于素材的原因,这里都是从网上找的图片,所以所谓的仿微信实际上最后成了下图这货.. .,点击变色也是自己用的windows自带绘图的颜料桶填充的空白. .. watermark/2/text/aHR0 ...

  5. c#如何设置成:【当前打开的项目是什么,就默认它为启动项目】,不然新添或打开别的项目都要设置一次启动 [原创]VS2012中将当前选定项目做为启动项

    主菜单→[工具]→[选项]→[项目和解决方案]→[生成并运行],选中“对于新解决方案,使用当前选定的项目作为启动项目” 应该是右键单击解决方案,点击属性打开,选中“当前选定内容”那一项,就可以把你正在 ...

  6. HDUOJ Number Sequence 题目1005

     /*Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  7. IDEA中Spark往Hbase中写数据

    import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.io.ImmutableBytesWr ...

  8. 24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏

    转自:https://blog.csdn.net/oscar999/article/details/27176791

  9. 插入CSS的方法

    传送门    选择器  selector {declaration1; declaration2; ... declarationN }   例:   p { text-aligh:center; } ...

  10. bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路【最小生成树】

    先把已有的边并查集了,然后MST即可 记得开double #include<iostream> #include<cstdio> #include<algorithm&g ...