使用mysqldump实现全库备份+binlog的数据还原

随着业务量的增长,数据库也是成倍增长,原来一直使用的全库备份不再适合现在的数据库了,动辄就备份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日志是否开启

使用mysqldump实现全库备份+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日志文件,里面误操作的时间的起始位置和终止位置,只要跳过这一段时间即可

使用mysqldump实现全库备份+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;    #此时表中有三条数数据为恢复成功

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/fbcdddf2786524ffcf2b2a4c46a5c9e7.html