zoukankan      html  css  js  c++  java
  • mysql binlog恢复数据实战

    在前面,我们了解了mysql binlog日志的作用以及使用方法:  http://www.php20.cn/article/237

    在后面讲到了,可以通过binlog进行恢复数据,那么,具体步骤是怎么样的呢?

    数据库备份

    数据库恢复的先决条件是,定时备份数据库,缩小binlog恢复范围.首先我们备份测试数据库数据:

    1
    mysqldump -uroot -p --database test > testBackSql.sql

    假定它为最后一次备份数据.

    test数据库,test数据表最后一个id为164

    仙士可博客

    新增测试数据

    通过mysql存储过程,写入测试新的测试数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    BEGIN
    DECLARE num INT;
    SET num=1;
    WHILE 1 DO
        INSERT INTO `test`(`name`, `age`, `sex`)
    VALUES
        (
            CONCAT('name:', num),
            FLOOR(1 +(RAND() * 40)),
            1
        );
    SET num = num + 1;
    SELECT SLEEP(0.01);
     
    END WHILE;
     
    END

    插入一段时间后,直接删除整个数据库,最后id为367 :

    仙士可博客

    数据恢复

    在上面的操作中,我们备份了数据为164 id之前的所有数据,插入数据到了367之后被删库.假设我们并不知道id到了367.开始使用binlog分析日志:

    首先使用 flush logs; 命令刷新二进制日志

    1
    flush logs;

    刷新二进制的目的为:确保在刷新日志之前的binlog都为正常数据操作(程序正常更改).

    刷新后,新的binlog用于做恢复数据时的记录,

    因为当执行备份文件恢复数据和binlog恢复时,都会产生新的binlog,不要和原来的数据进行冲突.  

    获取binlog日志列表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    mysql> show master logs;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |     77183 |
    | mysql-bin.000002 |       120 |
    +------------------+-----------+
    rows in set (0.00 sec)
     
    mysql>

    分析各个日志区间

    查询000001日志

    1
     /www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000001  |more

    仙士可博客

    查询000002日志

    1
     /www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000002  |more

    仙士可博客

    很明显,000002没有删库的那条记录,那么代表备份到删库这段时间的binlog日志都存在000001

    通过此开始时间,可以判断出,000001  binlog记录了备份后的所有数据.(如果涉及多个binlog,需要执行多个binlog恢复日志)

    通过查询binlog,获取到最后恢复点:

    1
     /www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000001  |tail -50

    仙士可博客

    将原有备份数据恢复:

    1
     cat testBackSql.sql |mysql -uroot -p

    仙士可博客

    备份数据已经恢复了,开始恢复二进制数据.

    1
    /www/server/mysql/bin/mysqlbinlog --stop-position=77066 /www/server/data/mysql-bin.000001| mysql -uroot -p

    仙士可博客

    mysql数据恢复成功.

    其他

    由于时间限制,关于恢复数据中,需要获取到初始恢复位置(也就是备份数据之后的那个位置,可通过--start-datetime=datetime 参数进行定位)

    然后通过--start-position=N 参数进行设置初始恢复点,进行正确的数据恢复

  • 相关阅读:
    接口的显示实现和隐式实现
    Math.Round和四舍五入
    经典SQL语句大全(转)
    简明添加log4net到项目中
    NAnt学习笔记(3) Properties, Loggers & Listeners
    (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
    Pyramid中如何配置多种URL匹配同一个View
    《IT项目管理》读书笔记(4) —— 项目范围管理
    C#语法糖
    枚举类型转换成字符串
  • 原文地址:https://www.cnblogs.com/myJuly/p/12973703.html
Copyright © 2011-2022 走看看