zoukankan      html  css  js  c++  java
  • 企业案例(二):增量恢复案例

    1、环境准备

    条件:

    1.具备全量备份(mysqldump)。

    2.除全量备份以外,还有全量备份之后产生的的所有binlog增量日志。

    1.1、建立数据库和表

    CREATE DATABASE dadong;
    USE `dadong`;
    CREATE TABLE `test` (
      `id` int(4) NOT NULL AUTO_INCREMENT,
      `name` char(20) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
    INSERT INTO `test` VALUES (1,'dadong'),(2,'he'),(3,'inca'),(4,'zuma'),(5,'kaka');

    1.2、建立备份目录

    准备环境:
    mkdir /data/backup -p
    date -s "2017/06/22"

    1.3、备份数据库

    mysqldump -B --master-data=2 --single-transaction dadong|gzip>/data/backup/dadong_$(date +%F).sql.gz
    备份数据库后插入几行数据。模拟没有备份全备,但是binlog存在记录时,恢复数据。
    mysql -e "use dadong;insert into test values(6,'bingbing');"
    mysql -e "use dadong;insert into test values(7,'xiaoting');"
    mysql -e "select * from dadong.test;"

    1.4、 模拟误删数据

    date -s "2017/06/22 11:40"
    mysql  -e "drop database dadong;show databases;"
    
    出现问题10分钟后,发现问题,删除了数据库了.

    2、开始恢复准备

    2.1、采用iptables防火墙屏蔽所有应用程序的写入

    [root@dadong ~]# iptables -I INPUT -p tcp --dport 3306 ! -s 172.16.1.51 -j DROP #<==非172.16.1.51禁止访问数据库3306端口。

    :此步操作目的是停止客户数据的写入,而并不是停止数据库

    2.2、 操作前备份

    cp -a /application/mysql/logs/dadong-bin.* /data/backup/

    2.3、准备全量和增量备份文件

    1.dadong_2017-06-22.sql(全量)
    2.bin.sql(增量)

    3、恢复过程

    3.1、 恢复全备

    [root@db02 backup]#zcat dadong_2017-06-22.sql.gz >dadong_2017-06-22.sql    ###解压全备文件
    [root@db02 backup]# mysql <dadong_2017-06-22.sql
    [root@db02 backup]# mysql -e "show databases;"
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | dadong             |
    | he            |
    | performance_schema |
    +--------------------+
    
    [root@db02 backup]# mysql -e "use dadong;select * from test;"
    +----+---------+
    | id | name    |
    +----+---------+
    |  1 | dadong  |
    |  2 | he |
    |  3 | inca    |
    |  4 | zuma    |
    |  5 | kaka    |
    +----+---------+

    3.2、恢复增量

    ———————————以下正式恢复操作——————————————             
    [root@db02 backup]#sed -n '22p'  dadong_2017-06-22.sql   ###获取binlog日志的起始地址339
    [root@db02 backup]#mysqlbinlog -d dadong --start-position=339 dadong-bin.0000012 -r bin.sql   ##”-d” 指定查看哪个库;”-r” 指定binlog日志存放在哪个文件中。
    [root@db02 backup]#grep -i drop bin.sql 
    [root@db02 backup]#sed -i '/^drop.*/d' bin.sql   ###删除删库语句,防止恢复后又执行drop语句。
    [root@db02 backup]# mysql dadong <bin.sql 
    [root@db02 backup]# mysql -e "use dadong;select * from test;"
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | dadong   |
    |  2 | he  |
    |  3 | inca     |
    |  4 | zuma     |
    |  5 | kaka     |
    |  6 | bingbing |
    |  7 | xiaoting |
    +----+----------+
    
    ####注释:mysqlbinlog -d dadong dadong-bin.0000012 -r bin.sql   ###其中“dadong-bin.0000012”要根据最后相关操作时间(删库时间)来确定drop语句放在哪个binlog文件中,
    并且binlog文件是二进制文件,必须使用mysqlbinlog进行操作后才能使用cat查看。

    :此时如果没有执行sed -i '/^drop.*/d' bin.sql就会出现下面错误

    3.3、 恢复完毕

    最后一步特别重要,恢复完毕后,一定要调整iptables允许用户访问.
  • 相关阅读:
    装饰器模式
    观察者模式
    策略模式
    分析法汇总
    事后诸葛亮分析(名字好难想队)
    团队项目第六周——Alpha阶段项目复审(名字很难想队)
    团队博客(第五周)-“名字好难想”
    团队博客(第四周)-“名字好难想”
    团队博客(第三周)-“名字好难想”
    团队博客(第二周)-“名字好难想”
  • 原文地址:https://www.cnblogs.com/dadonggg/p/8618467.html
Copyright © 2011-2022 走看看