zoukankan      html  css  js  c++  java
  • binlog_format不同模式下,对mysqlbinlog恢复的影响

     
    binlog_format='mixed'
    (root@g1-db-test-v01:3306)[(none)]>use test;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    (root@g1-db-test-v01:3306)[test]>update db1.t2 set name='haha' where id=105;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    (root@g1-db-test-v01:3306)[test]>use db1;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    (root@g1-db-test-v01:3306)[db1]>delete from test.t1 where id=11;
    Query OK, 1 row affected (0.02 sec)
     
    假如使用mysqlbinlog恢复db1的数据,命令加上参加 -d :
    mysqlbinlog -d db1 test-mysql-bin.000115 > 115d.sql
     
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
    /*!40019 SET @@session.max_insert_delayed_threads=0*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #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
    # Warning: this binlog is either in use or was not closed properly.
    BINLOG '
    +7uKWQ/aKC5wdAAAAHgAAAABAAQANS42LjIzLTcyLjEtbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAaP/
    EZw=
    '/*!*/;
    # at 120
    #170809 15:39:20 server id 1882073306  end_log_pos 198 CRC32 0x58ea2e3a         Query   thread_id=75    exec_time=0     error_code=0
    SET TIMESTAMP=1502264360/*!*/;
    SET @@session.pseudo_thread_id=75/*!*/;
    SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
    SET @@session.sql_mode=1073741824/*!*/;
    SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
    /*!C utf8 *//*!*/;
    SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
    SET @@session.lc_time_names=0/*!*/;
    SET @@session.collation_database=DEFAULT/*!*/;
    BEGIN
    /*!*/;
    # at 198
    # at 313
    #170809 15:39:20 server id 1882073306  end_log_pos 344 CRC32 0xb2671190         Xid = 32389
    COMMIT/*!*/;
    # at 344
    #170809 15:41:05 server id 1882073306  end_log_pos 422 CRC32 0x4befc6fe         Query   thread_id=75    exec_time=0     error_code=0
    SET TIMESTAMP=1502264465/*!*/;
    BEGIN
    /*!*/;
    # at 422
    #170809 15:41:05 server id 1882073306  end_log_pos 526 CRC32 0x2b0ef4d4         Query   thread_id=75    exec_time=0     error_code=0
    use `db1`/*!*/;
    SET TIMESTAMP=1502264465/*!*/;
    delete from test.t1 where id=11
    /*!*/;
    # at 526
    #170809 15:41:05 server id 1882073306  end_log_pos 557 CRC32 0xb34d26a0         Xid = 32473
    COMMIT/*!*/;
    DELIMITER ;
    # End of log file
    ROLLBACK /* added by mysqlbinlog */;
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    (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'
     
    (root@g1-db-test-v01:3306)[(none)]>use test;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    (root@g1-db-test-v01:3306)[test]>update db1.t2 set name='hehe' where id=105;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    (root@g1-db-test-v01:3306)[test]>use db1;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    (root@g1-db-test-v01:3306)[db1]>delete from test.t1 where id=10;
    Query OK, 1 row affected (0.02 sec)
     
    mysqlbinlog --base64-output=decode-rows -vv -d db1 test-mysql-bin.000116 > 116d.sql
     
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
    /*!40019 SET @@session.max_insert_delayed_threads=0*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #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
    # Warning: this binlog is either in use or was not closed properly.
    # at 120
    #170809 16:28:51 server id 1882073306  end_log_pos 192 CRC32 0x256a9f3c         Query   thread_id=78    exec_time=0     error_code=0
    SET TIMESTAMP=1502267331/*!*/;
    SET @@session.pseudo_thread_id=78/*!*/;
    SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
    SET @@session.sql_mode=1073741824/*!*/;
    SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
    /*!C utf8 *//*!*/;
    SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
    SET @@session.lc_time_names=0/*!*/;
    SET @@session.collation_database=DEFAULT/*!*/;
    BEGIN
    /*!*/;
    # at 192
    #170809 16:28:51 server id 1882073306  end_log_pos 246 CRC32 0x285d8d5d         Table_map: `db1`.`t2` mapped to number 395
    # at 246
    #170809 16:28:51 server id 1882073306  end_log_pos 366 CRC32 0xb84daa2e         Update_rows: table id 395 flags: STMT_END_F
    ### UPDATE `db1`.`t2`
    ### WHERE
    ###   @1=105 /* INT meta=0 nullable=0 is_null=0 */
    ###   @2='haha' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
    ###   @3='57747ab889255af96b48d65e505382' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
    ###   @4='' /* VARSTRING(72) meta=72 nullable=0 is_null=0 */
    ###   @5=NULL /* VARSTRING(72) meta=0 nullable=1 is_null=1 */
    ### SET
    ###   @1=105 /* INT meta=0 nullable=0 is_null=0 */
    ###   @2='hehe' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
    ###   @3='57747ab889255af96b48d65e505382' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
    ###   @4='' /* VARSTRING(72) meta=72 nullable=0 is_null=0 */
    ###   @5=NULL /* VARSTRING(72) meta=0 nullable=1 is_null=1 */
    # at 366
    #170809 16:28:51 server id 1882073306  end_log_pos 397 CRC32 0x74a5b1df         Xid = 32558
    COMMIT/*!*/;
    # at 397
    #170809 16:29:07 server id 1882073306  end_log_pos 468 CRC32 0x66079b66         Query   thread_id=78    exec_time=0     error_code=0
    SET TIMESTAMP=1502267347/*!*/;
    BEGIN
    /*!*/;
    # at 468
    # at 519
    # at 567
    #170809 16:29:07 server id 1882073306  end_log_pos 598 CRC32 0xb3ffd246         Xid = 32583
    COMMIT/*!*/;
    DELIMITER ;
    # End of log file
    ROLLBACK /* added by mysqlbinlog */;
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    (END) 
     



  • 相关阅读:
    Chrome cookies folder
    Fat URLs Client Identification
    User Login Client Identification
    Client IP Address Client Identification
    HTTP Headers Client Identification
    The Personal Touch Client Identification 个性化接触 客户识别
    购物车 cookie session
    购物车删除商品,总价变化 innerHTML = ''并没有删除节点,内容仍存在
    453
    购物车-删除单行商品-HTMLTableElement.deleteRow()
  • 原文地址:https://www.cnblogs.com/jerry-rock/p/7412178.html
Copyright © 2011-2022 走看看