测试妹子删了库!

=======================================================================

张贺,多年互联网行业工作经验,担任过网络工程师、系统集成工程师、LINUX系统运维工程师

笔者微信:zhanghe15069028807,现居济南历下区

=======================================================================

测试妹子删了库!

上周二,测试组的一个妹子删了库,这件事不想再回忆了。今天把当时的场景用虚拟机还原一下,然后复现一下数据恢复的过程,就当是个总结吧!说多了都是泪啊~

(1)模拟环境准备

[root@mysql02 ~]# mysql -p'cba-123'
mysql> create database bgxdb;
mysql> use bgxdb;
mysql> create table t1 (id int,name varchar(20));
mysql> insert into t1 values (1,"ccr");
mysql> insert into t1 values (2,"tfr");
mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    1 | ccr  |
|    2 | tfr  |
+------+------+

(2)全备

[root@mysql02 ~]# mysqldump -uroot -pcba-123 --all-databases --single-transaction --master-data=1 --flush-logs > /backup/mysql/$(date +%F%H)-mysql-all.sql

NOTE:我们每个星期天都会做一次全备

(3)再次插入数据

[root@mysql02 ~]# mysql -p'cba-123';
mysql> insert into bgxdb.t1 values
    -> (3,'tr1'),
    -> (4,'zx'),
    -> (5,'wq'),
    -> (6,'tj'),
    -> (7,'gwt');
mysql> select * from bgxdb.t1;
+------+------+
| id   | name |
+------+------+
|    1 | ccr  |
|    2 | tfr  |
|    3 | tr1  |
|    4 | zx   |
|    5 | wq   |
|    6 | tj   |
|    7 | gwt  |
+------+------+

(4)测试妹子的误操作

mysql> delete from bgxdb.t1 where id = '2';
mysql> drop database bgxdb;

(5)恢复全备

我就是从这一步开始的,幸好有全备,而且也开启了binlog日志,但恢复起来我还是心惊胆战!特意在虚拟机上练了好几遍,我是这么做的,如下所示:

[root@mysql02 ~]# sed -i '23aSET sql_log_bin=0;' /backup/mysql/2019-11-2812-mysql-all.sql 
[root@mysql02 ~]# mysql -u root -p'cba-123' < /backup/mysql/2019-11-2812-mysql-all.sql 
[root@mysql02 ~]# mysql -u root -p'cba-123' -e "select * from bgxdb.t1"
+------+------+
| id   | name |
+------+------+
|    1 | ccr  |
|    2 | tfr  |
+------+------+

还好,全备的数据全都正常恢复了

(6)进一步小心地恢复,跳过DELETEDROP语句

下面的操作就要小心翼翼了,不能一下子把二进制日志里面全备以后的操作全部恢复,一旦全部恢复了,那测试妹子的删除操作也会恢复,我们只能跳过误操作的地方。

[root@mysql02 ~]# sed -n '22p' /backup/mysql/2019-11-2812-mysql-all.sql 
CHANGE MASTER TO MASTER_LOG_FILE='bin_log.000002', MASTER_LOG_POS=154;
[root@mysql02 ~]# ls /log/mysql/  #全备之后只有一个` bin_log.000002`二进程日志文件
[root@mysql02 ~]# mysqlbinlog --start-position=154 --stop-position=577 
[root@mysql02 ~]# mysqlbinlog --start-position=670 --stop-position=701 
[root@mysql02 ~]# mysql -uroot -p'cba-123' -e "select * from bgxdb.t1"

+------+------+
| id   | name |
+------+------+
|    1 | ccr  |
|    2 | tfr  |
|    3 | tr1  |
|    4 | zx   |
|    5 | wq   |
|    6 | tj   |
|    7 | gwt  |
#被测试妹子删除的数据终于恢复回来了

注:上述案例在全备之后仅产生了一个二进制日志,如果有多个呢?该如何操作?如下所示

mysqlbinlog --base64-output="decode-rows" -v bin_log.000001 bin_log.000002 > test3.sql
原文地址:https://www.cnblogs.com/yizhangheka/p/12517244.html