安装了mysql后,binlog默认是关闭的
show variables like '%log_bin%'
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
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'获取
定期备份,并且用binlog记录下对数据库的更改,就可以实现数据的恢复
备份前先flush logs,产生一个新的binlog日志文件,锁住需要备份的所有的表,并手动记录下这一次备份和备份后产生的这个bin-log日志文件之间的关系
mysqldump -udebian-sys-maint -p1111 [dbname] -F > '[输出的文件路径]' //命令默认会锁住所有的表,-F表示刷新日志
这样当数据遭到严重破坏的时候,就可以先利用备份脚本恢复数据,然后找到备份后的position到出错前的position,执行这之间的操作即可
但是如果某次大面积的误更新操作后,没有及时发现,在错误数据的基础上又产生了很多新的数据,也只有恢复到误更新之前,然后手动修复其余的数据