你的位置:首页 > 数据库类

通过mysql二进制binlog恢复数据

2012-12-05 浏览:(3143) 数据库类 评论(0)

事情的起因是本月某日程序员一时操作失误删除了某表id大于或等于216内容,需要恢复到当天的数据,以免影响用户使用,这种恢复也很简单,通过mysql的二进制文件就可以,前提是你的mysql配置已经开启了二进制日志功能。

开始提取二进制日志,首先把某库22日00时开始的SQL语句提取出来,首先提取binlog.002895的某库SQL语句,mysql的二进制日志不是按天创建的,在my.cnf的配置文件有设置max_binlog_size最大值,日志的大小达到你设置的值时,mysql才会创建一个新的日志文件,如果大小达到设置的值了,最后的执行语句很长时会等到语句执行完毕,才会新建一个日志文件。

-rw-rw---- 1 mysql mysql 1073764199 Jan 20 09:55 binlog.002892

-rw-rw---- 1 mysql mysql 1073769146 Jan 20 20:43 binlog.002893

-rw-rw---- 1 mysql mysql 1073760451 Jan 21 10:39 binlog.002894

-rw-rw---- 1 mysql mysql 1073745436 Jan 21 17:31 binlog.002895

-rw-rw---- 1 mysql mysql 1073742546 Jan 22 05:28 binlog.002896

-rw-rw---- 1 mysql mysql 1073758697 Jan 22 13:44 binlog.002897

-rw-rw---- 1 mysql mysql 1073742021 Jan 22 21:27 binlog.002898

#/usr/local/webserver/mysql/bin/mysqlbinlog --no-defaults --database=testdb --start-datetime='2013-01-22 00:00:00' /home/mysql/binlog/binlog.002895 > log2895.txt

#/usr/local/webserver/mysql/bin/mysqlbinlog --no-defaults --database=testdb  /home/mysql/binlog/binlog.002896 > log2896.txt

#/usr/local/webserver/mysql/bin/mysqlbinlog --no-defaults --database=testdb  /home/mysql/binlog/binlog.002897 > log2897.txt

#/usr/local/webserver/mysql/bin/mysqlbinlog --no-defaults --database=testdb  /home/mysql/binlog/binlog.002898 > log2898.txt

现在已经把那个时间段的某库(这里使用testdb)的sql语句全部提取出来了,我们现在只需要恢复被误删的那个库那段时间的数据,并不需要恢复整个数据库,所以接下来进行第二次提取sql内容。

#grep userlist log2895.txt> log2895-userlist.txt

#grep userlist log2896.txt> log2896-userlist.txt

#grep userlist log2897.txt> log2897-userlist.txt

#grep userlist log2898.txt> log2898-userlist.txt

现在提取出来的文件就只有对userlist表操作的SQL语句了,这里有两个需要注意的地方,一个是你需要把最后一个log2898-userlist.txt文件中程序员误操作的那个删除的SQL语句删除掉,一个是提取出来的SQL语句是每行一条,行尾没有“;”号,要在每个行SQL语句行尾加“;”使用vi编辑器打开SQL文件:%s/$/;即可在每行行尾加上“;”符号。

登陆MYSQL命令行,执行

mysql > source /home/dbbak/log2895-userlist.txt;

mysql > source /home/dbbak/log2896-userlist.txt;

mysql > source /home/dbbak/log2897-userlist.txt;

mysql > source /home/dbbak/log2898-userlist.txt;

执行完毕,该表的数据就恢复到当天误删除之前的状态了。

  • 发表评论
  • 查看评论
【暂无评论!】

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。