zoukankan      html  css  js  c++  java
  • 测试妹子删了库!

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

    张贺,多年互联网行业工作经验,担任过网络工程师、系统集成工程师、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
    
  • 相关阅读:
    Xcode8 1 创建coreData的ManagedObject后,报错 linker command failed with exit code 1
    在IOS中根据圆心坐标、半径和角度计算圆弧上的点坐标
    NodeJS学习目录
    nodeJS之URL
    nodeJS之域名DNS
    初识nodeJS
    使用nodeJS实现前端项目自动化之项目构建和文件合并
    nodeJS之fs文件系统
    nodeJS之二进制buffer对象
    nodeJS之进程process对象
  • 原文地址:https://www.cnblogs.com/yizhangheka/p/12517244.html
Copyright © 2011-2022 走看看