zoukankan      html  css  js  c++  java
  • 1027mysqlbinlog工具日志恢复

    -- 转自http://bbs.csdn.net/topics/310068149
    -- 其实就是找到对应的位置然后执行语句即可

    -- 第一部分 输出
    mysqlbinlog "C:ProgramDataMySQLMySQL Server 5.6Datamysql-bin.000063" > D:ab1.txt

    -- 第二部分 输入到mysql
    mysqlbinlog "C:ProgramDataMySQLMySQL Server 5.6Datamysql-bin.000063" | mysql -uroot -p111111 back_db

    mysqlbinlog "C:ProgramDataMySQLMySQL Server 5.6Datamysql-bin.000063" | mysql -uroot -p111111 back_db

    237 1018 1170 1488
    mysqlbinlog "C:ProgramDataMySQLMySQL Server 5.6Datamysql-bin.000064" --start-position 1170 --stop-position 1488 | mysql -uroot -p111111 back_db

    mysqlbinlog "C:ProgramDataMySQLMySQL Server 5.6Datamysql-bin.000064" --start-position 237 --stop-position 1018 | mysql -uroot -p111111 back_db

    237 664
    mysqlbinlog "C:ProgramDataMySQLMySQL Server 5.6Datamysql-bin.000065" --start-position 237 --stop-position 664 | mysql -uroot -p111111 back_db

    mysqlbinlog工具的使用,大家可以看MySQL的帮助手册。里面有详细的用,
    在这个例子中,重点是--start-position参数和--stop-position参数的使用。

    •--start-position=N
    从二进制日志中第1个位置等于N参量时的事件开始读。
    •--stop-position=N
    从二进制日志中第1个位置等于和大于N参量时的事件起停止读。

    OK,现在开始,要启动二进制日志记录,
    要先在my.cnf / my.ini文件的mysqld里添加
    log-bin=日志名
    在这里,偶是的设置是log-bin=liangck
    然后再启动mysql服务,因为偶是用windows系统,
    所以执行net start mysql命令即可。

    然后在一测试数据库里,创建一个表,并添加记录。

    SQL code
     
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    mysql> create table test(id int auto_increment not null primary key,
                 val int,data varchar(20));
     
    mysql> insert into test(val,data) values(10,'liang');
    Query OK, 1 row affected (0.03 sec)
     
    mysql> insert into test(val,data) values(20,'jia');
    Query OK, 1 row affected (0.08 sec)
     
    mysql> insert into test(val,data) values(30,'hui');
    Query OK, 1 row affected (0.03 sec)
     
    mysql> flush logs;   --产生第二个日志文件
    Query OK, 0 rows affected (0.09 sec)
     
    mysql> insert into test(val,data) values(40,'aaa');
    Query OK, 1 row affected (0.05 sec)
     
    mysql> insert into test(val,data) values(50,'bbb');
    Query OK, 1 row affected (0.03 sec)
     
    mysql> insert into test(val,data) values(60,'ccc');
    Query OK, 1 row affected (0.03 sec)
     
    mysql> delete from test where id between and 5;  --删除记录
    Query OK, 2 rows affected (0.05 sec)
     
    mysql> insert into test(val,data) values(70,'ddd');
    Query OK, 1 row affected (0.03 sec)
     
    mysql> flush logs;          --产生第三个文件文件
    Query OK, 0 rows affected (0.11 sec)
     
    mysql> insert into test(val,data) values(80,'dddd');
    Query OK, 1 row affected (0.05 sec)
     
    mysql> insert into test(val,data) values(90,'eeee');
    Query OK, 1 row affected (0.03 sec)
     
    mysql> drop table test;       --删除表
    Query OK, 0 row affected (0.05 sec)



    ――――――――――――――――――――――――――――――――――
    OK,现在测试数据已经建好了,要求是什么呢?
    就是将test表的数据全部恢复出来。

    先用mysqlbinlog工具将日志文件生成txt文件出来分析。

    F:Program FilesMySQL_Datadatalog>
                    mysqlbinlog liangck.000001 > G:01.txt

    F:Program FilesMySQL_Datadatalog>
           mysqlbinlog liangck.000002 > G:02.txt

    F:Program FilesMySQL_Datadatalog>
             mysqlbinlog liangck.000003 > G:03.txt

    通过这三个命令,可以在G盘下生成3个文件,
    里面分别记录了日志文件的内容,
    也就是用户操作的步骤。
    因为我们需要重做第一个日志文件的所有操作,
    所以这里只需要将第一个日志文件全恢复就行了。
    F:Program FilesMySQL_Datadatalog>
            mysqlbinlog liangck.000001 | mysql -uroot –p

    Ok,接着,我们需要分析的是第二个日志文件。为什么要分析它呢,
    因为它中途执行了一个操作是DELETE,因为我们要做的是恢复全部数据,
    也就是我们不希望去重做这个语句。所以在这里我们要想办法去绕开它。
    我们先打开002.txt文件来分析一下。


    在这个文件中,我们可以看到DELETE的操作的起始位置是875,终止位置是1008.
    那么我们只要重做第二个日志文件的开头到875的操作,然后再从1008到末尾的操作,
    我们就可以把数据给恢复回来,而不会DELETE数据。所以执行两个命令:

    F:Program FilesMySQL_Datadatalog>
           mysqlbinlog liangck.000002 --stop-pos=875 | mysql -uroot -p

    F:Program FilesMySQL_Datadatalog>
            mysqlbinlog liangck.000002 --start-pos=1008 | mysql -uroot -p mytest


    OK,现在第二个日志文件的数据了。
    第三个日志文件也是同理,只要找到DROP TABLE的位置,就可以了。

    F:Program FilesMySQL_Datadatalog>
        mysqlbinlog liangck.000003 --stop-pos=574 | mysql -uroot –p

    现在我们再查一下数据看看:

    SQL code
     
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    mysql> select from test;
    +----+------+-------+
    | id | val  | data  |
    +----+------+-------+
    |  1 |   10 | liang |
    |  2 |   20 | jia   |
    |  3 |   30 | hui   |
    |  4 |   40 | aaa   |
    |  5 |   50 | bbb   |
    |  6 |   60 | ccc   |
    |  7 |   70 | ddd   |
    |  8 |   80 | dddd  |
    |  9 |   90 | eeee  |
    +----+------+-------+
    rows in set (0.00 sec)



    可以看到,全部数据都回来了。

  • 相关阅读:
    3、Spring Cloud Rest工程创建(通过IDEA创建)
    Centos7配置阿里epel源|yum源
    OSI七层模型:TCP/IP && HTTP && WebSocket && MQTT
    几种进程间的通信方式
    Tomcat类加载机制
    JAVA类加载器
    Spring事务隔离级别
    Spring事务传播特性
    Spring事务实现原理
    RPC框架Dubbo分析
  • 原文地址:https://www.cnblogs.com/qcfeng/p/6004914.html
Copyright © 2011-2022 走看看