• MySQL模拟:线上误update的恢复


    作为DBA,细心、沉稳是首要的基本素质。不过总有那么一会心烦意乱或者开发同学出现误操作之类的。。。这里模拟一个误update操作,然后恢复。

    如果开发同学有误操作之后最好先别乱动生产环境,需要记录几个信息给DBA同学来恢复数据。

    1:binlog_format、autocommit、binlog位置、误操作的时间点

    mysql> SHOW VARIABLES LIKE '%binlog_format%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | binlog_format | ROW   |
    +---------------+-------+
    1 row in set (0.00 sec)
    
    mysql> SHOW MASTER STATUS G
    *************************** 1. row ***************************
                File: binlog.000048
            Position: 442
        Binlog_Do_DB: 
    Binlog_Ignore_DB: 
    1 row in set (0.00 sec)
    
    时间点大约在2015年6月29日 16:50:00 - 2015年6月29日 17:50:00之间
    
    mysql> SHOW VARIABLES LIKE '%autocommit%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | autocommit    | OFF   |
    +---------------+-------+
    1 row in set (0.00 sec)
    

      

    2:如果在一个事物内的操作,同时autocommit是off的话,可以直接尝试回滚。看看是否可以恢复过来。

    3:原始数据

    mysql> select * from t1.t1;
    +------+------+
    | id1  | name |
    +------+------+
    |    8 | u11  |
    |    8 | u12  |
    |    8 | u13  |
    |    8 | u14  |
    |    8 | u15  |
    |    8 | name |
    |    8 | name |
    |    8 | name |
    |    8 | name |
    +------+------+
    9 rows in set (0.00 sec)
    

    误操作之后

    mysql> update t1.t1 set id1 = 10;
    Query OK, 9 rows affected (0.00 sec)
    Rows matched: 9  Changed: 9  Warnings: 0
    
    mysql> commit;
    Query OK, 0 rows affected (0.01 sec)
    

      

    恢复开始:

    1:找到当前写入的binlog信息:

    mysql> SHOW MASTER STATUS G
    *************************** 1. row ***************************
                File: binlog.000048
            Position: 777
        Binlog_Do_DB: 
    Binlog_Ignore_DB: 
    1 row in set (0.00 sec)
    

    2:估计误操作的时间点:2015-06-29 16:50:00和2015-06-29 17:20:00 之间,

    3:另外开一个窗口解析binlog

    mysqlbinlog --start-datetime='2015-06-29 01:30:00' --stop-datetime='2015-06-29 02:10:00' -vv binlog.000048
    [root@localhost mysqllog]# mysqlbinlog --start-datetime='2015-06-29 01:30:00' --stop-datetime='2015-06-29 02:10:00' -vv binlog.000048
    /*!40019 SET @@session.max_insert_delayed_threads=0*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #150629  1:44:39 server id 1  end_log_pos 107 	Start: binlog v 4, server v 5.5.20-log created 150629  1:44:39
    # Warning: this binlog is either in use or was not closed properly.
    BINLOG '
    dwWRVQ8BAAAAZwAAAGsAAAABAAQANS41LjIwLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
    '/*!*/;
    # at 107
    #150629  1:45:06 server id 1  end_log_pos 173 	Query	thread_id=7	exec_time=0	error_code=0
    SET TIMESTAMP=1435567506/*!*/;
    SET @@session.pseudo_thread_id=7/*!*/;
    SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
    SET @@session.sql_mode=0/*!*/;
    SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
    /*!C latin1 *//*!*/;
    SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=33/*!*/;
    SET @@session.lc_time_names=0/*!*/;
    SET @@session.collation_database=DEFAULT/*!*/;
    BEGIN
    /*!*/;
    # at 173
    # at 215
    #150629  1:44:56 server id 1  end_log_pos 215 	Table_map: `t1`.`t1` mapped to number 33
    #150629  1:44:56 server id 1  end_log_pos 415 	Update_rows: table id 33 flags: STMT_END_F
    
    BINLOG '
    iAWRVRMBAAAAKgAAANcAAAAAACEAAAAAAAEAAnQxAAJ0MQACA/4C/jwD
    iAWRVRgBAAAAyAAAAJ8BAAAAACEAAAAAAAEAAv///AYAAAADdTEx/AgAAAADdTEx/AYAAAADdTEy
    /AgAAAADdTEy/AYAAAADdTEz/AgAAAADdTEz/AYAAAADdTE0/AgAAAADdTE0/AYAAAADdTE1/AgA
    AAADdTE1/AYAAAAEbmFtZfwIAAAABG5hbWX8BgAAAARuYW1l/AgAAAAEbmFtZfwGAAAABG5hbWX8
    CAAAAARuYW1l/AYAAAAEbmFtZfwIAAAABG5hbWU=
    '/*!*/;
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u11' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u11' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u12' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u12' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u13' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u13' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u14' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u14' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u15' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u15' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    # at 415
    #150629  1:45:06 server id 1  end_log_pos 442 	Xid = 313
    COMMIT/*!*/;
    # at 442
    #150629  2:00:29 server id 1  end_log_pos 508 	Query	thread_id=7	exec_time=0	error_code=0
    SET TIMESTAMP=1435568429/*!*/;
    BEGIN
    /*!*/;
    # at 508
    # at 550
    #150629  2:00:27 server id 1  end_log_pos 550 	Table_map: `t1`.`t1` mapped to number 33
    #150629  2:00:27 server id 1  end_log_pos 750 	Update_rows: table id 33 flags: STMT_END_F
    
    BINLOG '
    KwmRVRMBAAAAKgAAACYCAAAAACEAAAAAAAEAAnQxAAJ0MQACA/4C/jwD
    KwmRVRgBAAAAyAAAAO4CAAAAACEAAAAAAAEAAv///AgAAAADdTEx/AoAAAADdTEx/AgAAAADdTEy
    /AoAAAADdTEy/AgAAAADdTEz/AoAAAADdTEz/AgAAAADdTE0/AoAAAADdTE0/AgAAAADdTE1/AoA
    AAADdTE1/AgAAAAEbmFtZfwKAAAABG5hbWX8CAAAAARuYW1l/AoAAAAEbmFtZfwIAAAABG5hbWX8
    CgAAAARuYW1l/AgAAAAEbmFtZfwKAAAABG5hbWU=
    '/*!*/;
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u11' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u11' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u12' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u12' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u13' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u13' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u14' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u14' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u15' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u15' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    # at 750
    #150629  2:00:29 server id 1  end_log_pos 777 	Xid = 318
    COMMIT/*!*/;
    DELIMITER ;
    # End of log file
    ROLLBACK /* added by mysqlbinlog */;
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
    

      

    找到误操作的update:

    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u11' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u11' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u12' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u12' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u13' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u13' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u14' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u14' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u15' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='u15' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### SET
    ###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    ### UPDATE `t1`.`t1`
    ### WHERE
    ###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
    ###   @2='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    

    处理之后的误操作语句

    UPDATE `t1`.`t1`
    WHERE
      id1=8 /* INT meta=0 nullable=1 is_null=0 */
      name='u11' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    SET
      id1=10 /* INT meta=0 nullable=1 is_null=0 */
      name='u11' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    UPDATE `t1`.`t1`
    WHERE
      id1=8 /* INT meta=0 nullable=1 is_null=0 */
      name='u12' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    SET
      id1=10 /* INT meta=0 nullable=1 is_null=0 */
      name='u12' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    UPDATE `t1`.`t1`
    WHERE
      id1=8 /* INT meta=0 nullable=1 is_null=0 */
      name='u13' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    SET
      id1=10 /* INT meta=0 nullable=1 is_null=0 */
      name='u13' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    UPDATE `t1`.`t1`
    WHERE
      id1=8 /* INT meta=0 nullable=1 is_null=0 */
      name='u14' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    SET
      id1=10 /* INT meta=0 nullable=1 is_null=0 */
      name='u14' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    UPDATE `t1`.`t1`
    WHERE
      id1=8 /* INT meta=0 nullable=1 is_null=0 */
      name='u15' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    SET
      id1=10 /* INT meta=0 nullable=1 is_null=0 */
      name='u15' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    UPDATE `t1`.`t1`
    WHERE
      id1=8 /* INT meta=0 nullable=1 is_null=0 */
      name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    SET
      id1=10 /* INT meta=0 nullable=1 is_null=0 */
      name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    UPDATE `t1`.`t1`
    WHERE
      id1=8 /* INT meta=0 nullable=1 is_null=0 */
      name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    SET
      id1=10 /* INT meta=0 nullable=1 is_null=0 */
      name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    UPDATE `t1`.`t1`
    WHERE
      id1=8 /* INT meta=0 nullable=1 is_null=0 */
      name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    SET
      id1=10 /* INT meta=0 nullable=1 is_null=0 */
      name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    UPDATE `t1`.`t1`
    WHERE
      id1=8 /* INT meta=0 nullable=1 is_null=0 */
      name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */
    

    根据对应的语句一句一句恢复即可。

      

  • 相关阅读:
    OCA读书笔记(11)
    shell命令--rev
    OCA读书笔记(10)
    shell命令--cut
    OCA读书笔记(9)
    shell命令--tail
    天气的研究
    网络知识汇总(2)
    shell命令--head
    OCM读书笔记(2)
  • 原文地址:https://www.cnblogs.com/xiaoit/p/4607933.html
Copyright © 2020-2023  润新知