公告:本站提供编程开发方面的技术交流与分享,打造最佳教程网,希望能为您排忧解难!

MySQL技巧 使用二进制日志恢复数据

MySQL技巧 使用二进制日志恢复数据

更新时间:2013-03-29 13:47:48 |

mysqlbinlog工具的使用,大家可以看MySQL的帮助手册,里面有详细的用。

  在这个例子中,重点是--start-position参数和--stop-position参数的使用。

  --start-position=N

  从二进制日志中第个位置等于N参量时的事件开始读。

  --stop-position=N

  从二进制日志中第个位置等于和大于N参量时的事件起停止读。

  OK,现在开始,要启动二进制日志记录,要先在my.cnf / my.ini文件的mysqld里添加

  log-bin=日志名

  在这里,偶是的设置是log-bin=liangck

  然后再启动mysql服务,因为偶是用windows系统,所以执行net start mysql命令即可。

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

 

  mysql>createtabletest(idintauto_incrementnotnullprimarykey,valint,datavarchar(20));
  mysql
>insertintotest(val,data)values(10,'liang');
  Query OK,
1row affected (0.03sec)
  mysql
>insertintotest(val,data)values(20,'jia');
  Query OK,
1row affected (0.08sec)
  mysql
>insertintotest(val,data)values(30,'hui');
  Query OK,
1row affected (0.03sec)
  mysql
>flush logs;--产生第二个日志文件
  Query OK,0rows affected (0.09sec)
  mysql
>insertintotest(val,data)values(40,'aaa');
  Query OK,
1row affected (0.05sec)
  mysql
>insertintotest(val,data)values(50,'bbb');
  Query OK,
1row affected (0.03sec)
  mysql
>insertintotest(val,data)values(60,'ccc');
  Query OK,
1row affected (0.03sec)
  mysql
>deletefromtestwhereidbetween4and5;--删除记录
  Query OK,2rows affected (0.05sec)
  mysql
>insertintotest(val,data)values(70,'ddd');
  Query OK,
1row affected (0.03sec)
  mysql
>flush logs;--产生第三个文件文件
  Query OK,0rows affected (0.11sec)
  mysql
>insertintotest(val,data)values(80,'dddd');
  Query OK,
1row affected (0.05sec)
  mysql
>insertintotest(val,data)values(90,'eeee');
  Query OK,
1row affected (0.03sec)
  mysql
>droptabletest;--删除表
  Query OK,0row affected (0.05sec)

 

  OK,现在测试数据已经建好了,要求是什么呢?

  就是将test表的数据全部恢复出来。

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

 

  F:/Program Files/MySQL_Data/data/log>mysqlbinlog liangck.000001> G:/001.txt
  F:/Program Files/MySQL_Data/data/log>mysqlbinlog liangck
.000002> G:/002.txt
  F:/Program Files/MySQL_Data/data/log>mysqlbinlog liangck
.000003> G:/003.txt

 

  通过这三个命令,可以在G盘下生成个文件,里面分别记录了日志文件的内容,也就是用户操作的步骤。

  因为我们需要重做第一个日志文件的所有操作,所以这里只需要将第一个日志文件全恢复就行了。

 

  F:/Program Files/MySQL_Data/data/log>mysqlbinlog liangck.000001| mysql -uroot –p

 

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

最佳教程网

最大的技术交流平台 www.goodxyx.com© CopyRight 2011-2013, All Rights Reserved

浙ICP备11033019号