mysql的update怎么恢复_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 Querythread_id=7exec_time=0error_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 Querythread_id=7exec_time=0error_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 */

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值