MySQL维护之–如何挽救误操作
在我们日常的数据库维护工作中,可能会遇到这种情况:虽然专业维护人员极力去避免意外情况对数据库系统稳定性、安全性的影响,但是很多情况下依然会超出我们的控制。比如:业务人员误操作操作部分表记录的误差;甚至可能是对表的误删除操作。一旦发生了这些情况,作为数据库维护人员,我们的职责是第一时间恢复数据,维持数据库的可用性。下面就说明一下如何处理这些突发状况。

表中部分记录的insert/update/delete回滚
如果对表执行DML操作后,发现有误,需要回滚,最快速的方法就是使用工具binlog-rollback生成回滚语句,完成回滚操作。
1.查看binlog信息,并对表进行异动操作
mysql>showmasterlogs;
+——————+———–+
|Log_name| File_size|
+——————+———–+
| mysql-bin.000023 |4317|
|mysql-bin.000024| 11992 |
| mysql-bin.000025 |12180|
|mysql-bin.000026| 12049 |
| mysql-bin.000027 |1029|
|mysql-bin.000028| 217 |
| mysql-bin.000029|647|
|mysql-bin.000030| 623 |
| mysql-bin.000031 |1409|
+——————+———–+
mysql>updatettsetCREATE_TIME=2021-03-2516: 04:00 whereTABLE_SCHEMA=sys and TABLE_NAME=waits_global_by_latency;
QueryOK,1 rowaffected(0.13 sec)
Rowsmatched: 1 Changed: 1 Warnings: 0
mysql>updatettsetCREATE_TIME=2021-03-2516:04:00 whereTABLE_SCHEMA=sys and TABLE_NAME=x$waits_by_user_by_latency;
QueryOK,1 rowaffected(0.14 sec)
Rowsmatched: 1 Changed: 1 Warnings: 0
mysql>select*fromttwhereTABLE_NAME=waits_global_by_latency or TABLE_NAME=x$waits_by_user_by_latency;
+————–+—————————-+———————+
|TABLE_SCHEMA| TABLE_NAME|CREATE_TIME|
+————–+—————————-+———————+
|sys| waits_global_by_latency|2021-03-2516:04:00|
|sys| x$waits_by_user_by_latency|2021-03-2516:04:00|
+————–+—————————-+———————+
2.查看binlogpos开始620及结束点1409
mysql> showbinlogeventsin mysql-bin.000031;
3.解析binlog,开始及结束时间点
mysqlbinlog–base64-output=decode-rows-v-v–start-position=620–stop-position=1409–database=htestmysql-bin.000031# at620#2003243:55:21serverid2330103end_log_pos758CRC320xe0578aa4Rows_query# updatettset CREATE_TIME=2021-03-2516:04:00 where TABLE_SCHEMA=sys andTABLE_NAME=waits_global_by_latency# at758#2003243:55:21serverid2330103end_log_pos811CRC320x9417f454Table_map:`htest`.`tt`mappedtonumber108# at811…# at1079#2003243:55:38serverid2330103end_log_pos1220CRC320x066519aaRows_query# updatettset CREATE_TIME=2021-03-2516:04:00
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6439.html
