mysql通过binlog恢复数据

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

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

2.user表删除一条数据 DELETE from user where name='路飞',这个时候在data文件夹中就会产生binlog
[img]http://dl2.iteye.com/upload/attachment/0117/9413/7a19da25-4b23-3f28-8e2a-7e5937f187b4.png[/img]

3.使用 show BINARY logs; 命令查看binlog列表
[img]http://dl2.iteye.com/upload/attachment/0117/9393/e1a4054b-0457-353a-9bcc-190af9f61c2b.png[/img]

4.000006最大,这个最新的日志就是记录在000006里面,使用show binlog events in 'mysql_bin.000006'; 命令来查看000006这个binlog具体细节,主要是看start-pos和stop-pos
[img]http://dl2.iteye.com/upload/attachment/0117/9397/9f48677e-ea8f-3e79-9cea-513473ca7997.png[/img]
从图中可以看出最后一次操作从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
[img]http://dl2.iteye.com/upload/attachment/0117/9405/063ac7ac-b18c-3df2-81c9-730125f0532c.png[/img]
我们已经看到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++来打开它
[img]http://dl2.iteye.com/upload/attachment/0117/9407/b79d59b6-5797-3a45-a282-218ef53e8453.png[/img]
显示正常,如果是Linux出现乱码问题,导出到windows用notepad++打开

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

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

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

你可能感兴趣的:(mysql通过binlog恢复数据)