随着业务量的增长,数据库也是成倍增长,原来一直使用的全库备份不再适合现在的数据库了,动辄就备份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日志是否开启
二.创建实验数据
由于刚建的数据库,日志中没有数据,创建新的数据库和表格来进行实验
#创建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的数据还原
mysql -uroot -p123456 tab1 < /opt/t1_20170626.sql #还原删除前的全部数据,这时候应该有两条数据,zhangsan和lisi
mysqlbinlog -v /usr/local/mysql/binlog/mysql.bin.000002 #分析新开启的binlog日志文件,里面误操作的时间的起始位置和终止位置,只要跳过这一段时间即可
从binlog恢复数据
mysqlbinlog --stop-position=120 /opt/mysql.bin.000002|mysql -uroot -p123456
mysqlbinlog --start-position=291 /opt/mysql.bin.000002|mysql -uroot -p123456
查看恢复情况
select * from t1.tab1; #此时表中有三条数数据为恢复成功
手动备份恢复过程已经全部完成,下次说一说如何脚本化这个流程