欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

MySQL模拟:线上误update的恢复

发布时间:2025/4/16 数据库 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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.000048Position: 442Binlog_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: 0mysql> commit; Query OK, 0 rows affected (0.01 sec)

  

恢复开始:

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

mysql> SHOW MASTER STATUS \G *************************** 1. row ***************************File: binlog.000048Position: 777Binlog_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_FBINLOG ' 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_FBINLOG ' 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` WHEREid1=8 /* INT meta=0 nullable=1 is_null=0 */name='u11' /* STRING(60) meta=65084 nullable=1 is_null=0 */ SETid1=10 /* INT meta=0 nullable=1 is_null=0 */name='u11' /* STRING(60) meta=65084 nullable=1 is_null=0 */ UPDATE `t1`.`t1` WHEREid1=8 /* INT meta=0 nullable=1 is_null=0 */name='u12' /* STRING(60) meta=65084 nullable=1 is_null=0 */ SETid1=10 /* INT meta=0 nullable=1 is_null=0 */name='u12' /* STRING(60) meta=65084 nullable=1 is_null=0 */ UPDATE `t1`.`t1` WHEREid1=8 /* INT meta=0 nullable=1 is_null=0 */name='u13' /* STRING(60) meta=65084 nullable=1 is_null=0 */ SETid1=10 /* INT meta=0 nullable=1 is_null=0 */name='u13' /* STRING(60) meta=65084 nullable=1 is_null=0 */ UPDATE `t1`.`t1` WHEREid1=8 /* INT meta=0 nullable=1 is_null=0 */name='u14' /* STRING(60) meta=65084 nullable=1 is_null=0 */ SETid1=10 /* INT meta=0 nullable=1 is_null=0 */name='u14' /* STRING(60) meta=65084 nullable=1 is_null=0 */ UPDATE `t1`.`t1` WHEREid1=8 /* INT meta=0 nullable=1 is_null=0 */name='u15' /* STRING(60) meta=65084 nullable=1 is_null=0 */ SETid1=10 /* INT meta=0 nullable=1 is_null=0 */name='u15' /* STRING(60) meta=65084 nullable=1 is_null=0 */ UPDATE `t1`.`t1` WHEREid1=8 /* INT meta=0 nullable=1 is_null=0 */name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */ SETid1=10 /* INT meta=0 nullable=1 is_null=0 */name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */ UPDATE `t1`.`t1` WHEREid1=8 /* INT meta=0 nullable=1 is_null=0 */name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */ SETid1=10 /* INT meta=0 nullable=1 is_null=0 */name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */ UPDATE `t1`.`t1` WHEREid1=8 /* INT meta=0 nullable=1 is_null=0 */name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */ SETid1=10 /* INT meta=0 nullable=1 is_null=0 */name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */ UPDATE `t1`.`t1` WHEREid1=8 /* INT meta=0 nullable=1 is_null=0 */name='name' /* STRING(60) meta=65084 nullable=1 is_null=0 */

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

 

  

 

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的MySQL模拟:线上误update的恢复的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。