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开启状态

1032 mysql 从库 mysql 从库基于主库binlog恢复_数据库

Binlog日志包括两类文件:

第一个是二进制索引文件(后缀名为.index)

第二个为日志文件(后缀名为.00000*),记录数据库所有的DDL和DML(除了查询语句select)语句事件

1032 mysql 从库 mysql 从库基于主库binlog恢复_数据库_02

 

利用binlog日志恢复mysql数据,有一张数据表studens:此表位于db1数据库

1032 mysql 从库 mysql 从库基于主库binlog恢复_数据库_03

将此数据库备份到本地,备份如下

1032 mysql 从库 mysql 从库基于主库binlog恢复_mysql_04

可以在数据备份之前或者之后执行flush logs重新生成一个binlog日志用来记录备份之后的所有增删改操作(重新生成日志更好找pos点)

对表进行插入2条新的数据

1032 mysql 从库 mysql 从库基于主库binlog恢复_1032 mysql 从库_05

开始模拟操作失误,误删除了数据库,所有数据都不见,要通过binlog日志恢复数据信息

 

1032 mysql 从库 mysql 从库基于主库binlog恢复_mysql_06

有做了数据库备份,可以先将备份的数据db1.sql导入进去,剩下缺少的就是备份之后操作所产生的内容(备份之后执行插入新的id5,id6数据)

先恢复备份的数据:创建库db1,并选择库(use hello),通过命令source  db1.sql将数据库内容导入

1032 mysql 从库 mysql 从库基于主库binlog恢复_1032 mysql 从库_07

恢复的数据的显示情况

1032 mysql 从库 mysql 从库基于主库binlog恢复_数据库_08

恢复的数据只是截止到备份时间的数据,剩下缺少的数据可以通过binlog日志来恢复

由于备份数据库之前重新创建了mysql-bin.000003日志,所以备份后的所有操作都保存在这个日志中,可以先备份下这个日志文件,cp mysql-bin.000003   /root/   

接着执行flush logs 刷新日志,重新创建了一个binlog日志4

1032 mysql 从库 mysql 从库基于主库binlog恢复_1032 mysql 从库_09

新建一个日志的目的:接下来所有操作的数据都会写入到新的日志中,日志3里面不会在写入任何数据,方便根据日志3的内容恢复数据

查看日志3:  show  binlog  events in ‘mysql-bin.000003’;

1032 mysql 从库 mysql 从库基于主库binlog恢复_mysql_10

查看日志,发现执行更新操作的事务区间为312到647,可以执行以下命令来恢复这段数据

mysqlbinlog    --start-position=312 --stop-position=647  --database=db1  /var/lib/mysql/mysql-bin.000003 | mysql  -uroot  -p密码  -v  db1

1032 mysql 从库 mysql 从库基于主库binlog恢复_数据库_11

 

1032 mysql 从库 mysql 从库基于主库binlog恢复_数据_12

恢复结果如下: 

1032 mysql 从库 mysql 从库基于主库binlog恢复_mysql_13