mysql通过binlog恢复数据

mysql自身没有提供flashback功能,所以我们在误操作之后要恢复数据就麻烦很多,如果不用别人的插件,下面这种方法可以恢复

1.binlog必须开启,并且必须是ROW模式。如果这个前提不满足,那么下面这种方法恢复不了数据。
查看binlog是否开启 show variables like  '%log_bin%'
查看binlog的模式 show variables like  '%binlog_format%'
在my.ini中加入这两行
# binlog日志文件名前缀
log-bin=mysql_bin
# binlog格式
binlog_format=ROW

2.user表删除一条数据 DELETE from user where name='路飞',这个时候在data文件夹中就会产生binlog


3.使用 show BINARY logs; 命令查看binlog列表


4.000006最大,这个最新的日志就是记录在000006里面,使用show binlog events in 'mysql_bin.000006'; 命令来查看000006这个binlog具体细节,主要是看start-pos和stop-pos

从图中可以看出最后一次操作从pos=14043开始,到pos=14171结束

5.命令行cd到MySQL的bin目录下我的路径是E:\program\db\mysql-5.6.17-winx64\bin

6.使用mysql自带的mysqlbinlog命令来查看bin_log.000006的具体sql,命令为
E:\program\db\mysql-5.6.17-winx64\bin>mysqlbinlog --start-position=14043 --stop-position=14171  -v -v ../data/mysql_bin.000006

我们已经看到sql了,如果数据中只有英文到没什么,如果数据中有中文居然会出现乱码,mysqlbinlog有一个指定编码的参数,我试过,没什么用。-v表示显示sql, -v -v显示行定义,可以用 mysqlbinlog --help查看各个参数含义

7.如果遇到中文乱码就不要在命令行下面看了,使用命令 E:\program\db\mysql-5.6.17-winx64\bin>mysqlbinlog --start-position=14043 --stop-position=14171  -v -v ../data/mysql_bin.000006>d:\3.sql
把这个查看结果导出到D盘,然后用notepad++来打开它

显示正常,如果是Linux出现乱码问题,导出到windows用notepad++打开

8.上图中@1=2  @2='路飞' 这个表的第一列=2,第二列=路飞的数据被删了。既然知道被删的数据的具体信息了,那就可以手动恢复这条数据。如果数据量太大,可以借助一些其他工具或者自己写个程序来恢复。

mysql -uroot -p dbname < 3.sql也可以

参考:http://www.cnblogs.com/kevingrace/p/5904800.html

猜你喜欢

转载自wsdtq123.iteye.com/blog/2304096