您的位置:首页 > 数据库 > MySQL

mysql通过binlog恢复数据

2017-10-17 17:43 441 查看
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





大小: 8.2 KB





大小: 22.1 KB





大小: 26.8 KB





大小: 59.9 KB





大小: 48.4 KB

查看图片附件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: