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

记录使用mysqlbinlog回滚日志

2018-01-11 13:16 197 查看
这两天线上数据被误删除为了回滚折腾了两天终于搞定,其中用到了mysql的binlog以此记录一下。

之前没有搞过mysql的mysqlbinlog查看了很多文档但是多数为简单的教程,虽然有用但是还是相对疑惑。因此自己记录一下希望有用。

mysqlbinlog是mysql自带的回滚数据的机制,默认是不开启的需要手动开启。

一、开启mysql-binlog日志

在mysql配置文件my.cnf加上如下配置

[mysqld]

log-bin=mysql-bin

重启mysql

service mysqld restart

这里有一点有可能你是使用的阿里云的rds服务,那样的话应该是已经默认开启了binlog,可以直接登录阿里云平台下载binlog文件。不过也可以登录进行查看到底是否已经开启了。不过这个貌似只要你权限够用

二、显示是否已经开启了binlog命令

show variables like ‘log_bin’



显示on表示已经开启了binlog

三、获取文件进行恢复

1、直接进行恢复

mysqlbinlog /usr/local/mysql/data/binlog.123456 | mysql -u root -p

2、按位置进行恢复 主要参数[–stop-position –start-position]

mysqlbinlog –stop-position=368312 –start-position=368315 /usr/local/mysql/data/binlog.123456 | mysql -u root -p

这里的位置可以通过读取binlog文件进行查看,不过这个也必须自己知道进行了那些操作。后面说如果看到的文件都是乱码或者看不到真正sql的问题

3、按时间点进行恢复 主要参数 [–stop-datetime –start-datetime]

mysqlbinlog –stop-datetime=”2005-04-20 9:59:59” –start-datetime=”2005-04-20 10:01:00” /usr/local/mysql/data/binlog.123456 | mysql -u root -p

时间点恢复跟位置恢复道理一样,也必须知道具体操作的时间和要恢复到什么时间

4、不同的方式进行恢复

1、如果是登录到了mysql并且binlog也是在一台服务器上切一般binlog的目录会在mysql安装目录下data文件下那么就可以直接进行恢复

这种情况可以直接在mysql下执行命令

2、如果是只拿到了binlog文件,并且是线下的服务器需要先尝试数据正确后再导入生产的

这种情况可以先把binlog文件输出到你制定的sql文件如:

mysqlbinlog /usr/local/mysql/data/binlog.123456 > /tmp/mysql.sql

这样的输出有可能是看不到任何有价值的sql如果想看到标准的sql可以使用

mysqlbinlog –base64-output=DECODE-ROWS -v /usr/local/mysql/data/binlog.123456 > /tmp/mysql.sql

上面的情况也可能得到的sql不是想要的需要进行替换,那么如果数据量少手动替换@1@2就可以如果比较多建议使用开源工具mysql2binlog github地址:https://github.com/danfengcao/binlog2sql

最后一点线上数据一定要当心,虽然mysql有binlog机制,但还是希望人尽量少用它!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Mysql binlog