目录
- 测试妹子删了库!
- (1)模拟环境准备
- (2)全备
- (3)再次插入数据
- (4)测试妹子的误操作
- (5)恢复全备
- (6)进一步小心地恢复,跳过DELETE和DROP语句
=======================================================================
张贺,多年互联网行业工作经验,担任过网络工程师、系统集成工程师、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)进一步小心地恢复,跳过DELETE
和DROP
语句
下面的操作就要小心翼翼了,不能一下子把二进制日志里面全备以后的操作全部恢复,一旦全部恢复了,那测试妹子的删除操作也会恢复,我们只能跳过误操作的地方。
[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