天天看点

MySQL(三)利用binlog日志恢复数据

1.开启binlog

安装了mysql后,binlog默认是关闭的

show  variables like  '%log_bin%'

MySQL(三)利用binlog日志恢复数据

vim /etc/mysql/my.cnf  添加

[mysqld] 

log-bin=mysql-bin

server-id=1

添加完后重启  sudo service mysql restart

重启完成后在 /var/lib/mysql/下会生成   mysql-bin.index和mysql-bin.000001

/var/lib/mysql/是默认的目录,mysql-bin是日志文件名的前缀

也可以指定日志文件的路径,比如需要指定为/logs/mysql-binlog/

关于配置的方法,网上很多文章都说

[mysqld]

log-bin=/logs/mysql-binlog/mysql-bin

这样配置其实没有问题,但是由于mysql是以mysql用户运行的,如果没有/logs/mysql-binlog/目录的权限,重启的时候会报错

执行下面的命令,亲测可行

sudo chown -R mysql mysql-binlog

sudo vim /etc/apparmor.d/usr.sbin.mysqld

添加 /logs/** rwk,

/etc/init.d/apparmor restart

2.常用命令

show [master|slave] status      //查看当前的binlog日志状态(这命令应该和主从复制有关)

show master logs     //查看所有的日志文件

flush logs  //生成一个新的日志文件

reset master    //清空之前的日志,生成一个新的日志

show binlog events in 'mysql-bin.000002'        //查看日志中记录的事件

#################下面是非mysql命令###################

mysqlbinlog --no-defaults --base64-output=decode-rows -v  mysql-bin.000002     //查看日志内容

mysqlbinlog --no-defaults --start-position=4 --stop-position=1009 mysql-bin.000002 | mysql -udebian-sys-maint -p1111 test      //start-position和stop-position可以通过  show binlog events in 'mysql-bin.000002'获取

3.利用mysqldump和binlog恢复数据

定期备份,并且用binlog记录下对数据库的更改,就可以实现数据的恢复

备份前先flush logs,产生一个新的binlog日志文件,锁住需要备份的所有的表,并手动记录下这一次备份和备份后产生的这个bin-log日志文件之间的关系

mysqldump -udebian-sys-maint -p1111 [dbname] -F > '[输出的文件路径]'     //命令默认会锁住所有的表,-F表示刷新日志

这样当数据遭到严重破坏的时候,就可以先利用备份脚本恢复数据,然后找到备份后的position到出错前的position,执行这之间的操作即可

但是如果某次大面积的误更新操作后,没有及时发现,在错误数据的基础上又产生了很多新的数据,也只有恢复到误更新之前,然后手动修复其余的数据

继续阅读