Binlog日志,即binary log,是二进制日志文件,做主从复制时主节点维护一个binlog日志文件,从节点从binlog中同步数据,也可以通过binlog日志来恢复数据,属于增量备份。
首先开启mysql binlog日志
在mysql配置文件(vi /etc/my.cnf) 在mysqld区域内添加内容
server-id = 1(单个节点id)
log-bin= /var/lib/mysql/mysql-bin(位置一般和mysql库文件所在位置一样)
expire_logs_days = 10(表示此日志保存时间为10天),
然后重启mysqld,再次查看binlog日志开启状态为ON
登录mysql查看binlog日志的状态,输入show variables like ‘%log_bin%’;查看binlog为on开启状态
Binlog日志包括两类文件:
第一个是二进制索引文件(后缀名为.index)
第二个为日志文件(后缀名为.00000*),记录数据库所有的DDL和DML(除了查询语句select)语句事件
利用binlog日志恢复mysql数据,有一张数据表studens:此表位于db1数据库
将此数据库备份到本地,备份如下
可以在数据备份之前或者之后执行flush logs重新生成一个binlog日志用来记录备份之后的所有增删改操作(重新生成日志更好找pos点)
对表进行插入2条新的数据
开始模拟操作失误,误删除了数据库,所有数据都不见,要通过binlog日志恢复数据信息
有做了数据库备份,可以先将备份的数据db1.sql导入进去,剩下缺少的就是备份之后操作所产生的内容(备份之后执行插入新的id5,id6数据)
先恢复备份的数据:创建库db1,并选择库(use hello),通过命令source db1.sql将数据库内容导入
恢复的数据的显示情况
恢复的数据只是截止到备份时间的数据,剩下缺少的数据可以通过binlog日志来恢复
由于备份数据库之前重新创建了mysql-bin.000003日志,所以备份后的所有操作都保存在这个日志中,可以先备份下这个日志文件,cp mysql-bin.000003 /root/
接着执行flush logs 刷新日志,重新创建了一个binlog日志4
新建一个日志的目的:接下来所有操作的数据都会写入到新的日志中,日志3里面不会在写入任何数据,方便根据日志3的内容恢复数据
查看日志3: show binlog events in ‘mysql-bin.000003’;
查看日志,发现执行更新操作的事务区间为312到647,可以执行以下命令来恢复这段数据
mysqlbinlog --start-position=312 --stop-position=647 --database=db1 /var/lib/mysql/mysql-bin.000003 | mysql -uroot -p密码 -v db1
恢复结果如下: