首页 » VPS 知识 » 浏览内容

通过MySql日志恢复丢失的数据


2012-11-27 23:44:32 1,486 0 发表评论 字体: 作者:C.K.

体验版 88 元,个人版 128 元,多用户版 288元个人版160元升级到多用户版。

最郁闷的情况是没有备份数据库,但是因为自己的疏忽不小心把数据给删除了,特别是删除了积累很久的数据,那真是想死的心都会有。

不过如果你没有关闭MySql的日志功能,那么还是有补救的方法。前两天就遇到这样一件事,一朋友由于误操作导致公司网站数据几乎全丢,并且之前没有任何备份;我上服务器查看后发现,还好MySql日志全部在(mysql下的var目录下可以看到mysql-bin.0000XX这样的文件,这个就是MySql的日至,这个里面记录了所有之前运行过的SQL语句;没有查询语句)。

既然日志还在,那就算有得救,先将二进制的日志文件转成SQL语句,MySql提供了这样的方法“mysqlbinlog”;方法还提供了–start-date和–stop-date这两个选项来确定开始和结束时间,如果不带这两个参数将恢复日至文件中的所有SQL语句,当然-u,-p,-h,-P这样的基础参数一定会有;因为是误操作导致数据丢失,所以要将结束时间定义在误操作前,不然恢复出来的数据还是和现在一样。以下命令是从bin.000001这个日志中生成2012年1月1日0点到2012年8月1日0点之间的SQL语句,并且存入1.sql中,如果有多个日志文件那就要进行多次这个动作。

cd /usr/local/mysql/bin
  • mysqlbinlog -uroot -p --start-date="2012-01-01 0:00:00" --stop-date"2012-08-01 0:00:00" /usr/local/mysql/bin.000001 > 1.sql
  • 通过这个命令导出的文件估计大家都能看懂了,就是一些带了注释的SQL语句;有了这个那直接将SQL导入到MySql中即可;这里注意下,因为日至中有那个时间段所有的建库,建表,添加,删除,修改语句,所以最好将数据库恢复到导出时设定的那个开始时间点,这样不会出现语句冲突的问题;当然如果是在已经忘记时间或者有很多数据库,那么就要自己去处理下所有的SQL语句,要么将需要恢复的有关SQL整理好或者解决导入过程中所有的冲突。

    这里着重提醒,恢复前一定要对现在的MySql做全面备份,以免产生更大损失

    具体的导入数据方法应该就不用过多说了,只要将你导出的所有sql文件全部运行一遍即可。

      网站统计 Statistics

      • 创建时间: 2005年1月3日 距今4766 天
      • 日志总数: 2461
      • 评论总数: 630
      • 标签总数: 654
      • 链接总数: 273
      • 最后更新: 2017-7-1 18:16:33
      • 您是本站第 13208443 位访客

      广告区 Guǎng Gào