随着业务量的增长,数据库也是成倍增长,原来一直使用的全库备份不再适合现在的数据库了,动辄就备份10G-20G,太占用磁盘空间,所以就考虑用更简洁更快速更节省磁盘空间的备份方法,这就想到了使用binlog日志来进行备份和恢复,下面是具体实施的方法:


环境介绍:

操作系统:Centos 7.2

数据库:Mysql 5.6


一.安装Mysql和改配置文件

安装就不具体介绍了,网上教程很多,配置文件需要添加以下选项:

vim /etc/my.cnf

log_bin = mysql-binlog    #开启binlog日志功能,默认在mysql的datadir目录下面

show variables like 'log_bin';    #进入Mysql查看binlog日志是否开启

wKiom1lQpkaz_CEaAAANq-NpGUw922.png-wh_50


二.创建实验数据

由于刚建的数据库,日志中没有数据,创建新的数据库和表格来进行实验

#创建t1库

create database t1;

#创建tab1表

create table t1.tab1(id int primary key auto_increment,name varchar(20));

#插入两条数据

insert into t1.tab1(name) values('zhangsan');

insert into t1.tab1(name) values('lisi');


三.进行全库备份和日志备份

#进行全库备份,并产生新日志

mysqldump -uroot -p123456 --flush-logs t1 > /opt/t1_`date +%Y%m%d`.sql

#备份日志文件,全库备份前有几个日志就备份几个

cp /usr/local/mysql/binlog/mysql.bin.000001 /opt/


四.模拟删除数据

delete from t1.tab1 where id=2;

#插入新数据

insert into t1.tab1(name) values('wangwu');


五.备份mysqldump之后的binlog日志文件

cp /usr/local/mysql/binlog/mysql.bin.000002 /opt/


六.用Mysqldump实现全库备份+binlog的数据还原

  1. mysql -uroot -p123456 tab1 < /opt/t1_20170626.sql  #还原删除前的全部数据,这时候应该有两条数据,zhangsan和lisi

  2. mysqlbinlog -v /usr/local/mysql/binlog/mysql.bin.000002  #分析新开启的binlog日志文件,里面误操作的时间的起始位置和终止位置,只要跳过这一段时间即可

    wKiom1lQuyOS0MPLAAB1B8ZZsCo894.png-wh_50

  3. 从binlog恢复数据

    mysqlbinlog --stop-position=120 /opt/mysql.bin.000002|mysql -uroot -p123456

    mysqlbinlog --start-position=291 /opt/mysql.bin.000002|mysql -uroot -p123456

  4. 查看恢复情况

    select * from t1.tab1;    #此时表中有三条数数据为恢复成功


手动备份恢复过程已经全部完成,下次说一说如何脚本化这个流程