MySQL增量备份与恢复

  • 增量备份:只备份那些在上次完全备份或者增量备份后被修改的文件才会被备份。

  • 优点:没有重复数据,备份量不大,时间短。

  • 缺点:需要上一次完全备份及完全备份之后所有的增量备份才能恢复,而且对所有增量备份进行逐个反推恢复,操作较为繁琐。

一、增量备份

1、编辑MySQL配置文件,开启二进制功能

vim /etc/my.cnf

 log-bin=mysql-bing        #添加二进制日志文件

systemctl restart mysql.service

  • 服务重启之后会在/use/local/mysql/data目录下生成一个空的二进制日志文件;

MySQL的增量备份与恢复

2、创建以基本数据库

mysql -u root -p #进入MySQL

create database client; #创建一个名为client的库

use client; #使用数据库

create table info (name varchar(10),score decimal(5.2)); #创建表

insert into info (name,score) values ('zhangsan',88); #插入内容

insert into info (name,score) values ('lisi',88);

quit #退出MySQL

3、备份数据库,并生成新的二进制日志文件;

mysqldump -u root -p client test > /opt/client.sql

mysqladmin -u root -p flush-logs

  • 数据库中的内容会生成到第一个二进制日志文件中,除此之外还会生成一个空的二进制日志文件;

MySQL的增量备份与恢复

4、在数据库中添加新的内容,并生成新的二进制日志文件;

mysql -u root -p

use client

insert into info (name,score) values ('test01',88);

quit #退出MySQL

mysqladmin -u root -p flush-logs

  • 数据库中新添加的内容会生成到第二个二进制日志文件,同时生成一个空的二进制日志文件;

MySQL的增量备份与恢复_第1张图片

二、恢复

1、删除表,并进行完全备份恢复操作;

mysql -u root -p ;

use client;

drop tables test;

quit;

mysql -u root -p client < /opt/client.sql

2、使用二进制日志文件进行恢复操作;

mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p

MySQL的增量备份与恢复_第2张图片

三、基于时间点与位置的恢复

1、插入两条数据内容,并删除一条数据,模拟操作失误;

mysql -u root -p

use client

insert into info (name,score) values ('test01',88);

delete from test where name='lisi';

insert into info (name,score) values ('test02',88);

quit

2、生成二进制日志文件,删除表,并进行完全备份恢复操作;

mysqladmin -u root -p flush-logs

mysql -u root -p ;

use client;

drop tables test;

quit

mysql -u root -p client < /opt/client.sql

MySQL的增量备份与恢复_第3张图片

3、按时间点进行恢复(跳过误操作时间);

mysqlbinlog --no-defaults --stop-datetime='18-07-06 10:39:23' /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -p

mysqlbinlog --no-defaults--start-datetime='18-07-06 10:39:33' /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -p

MySQL的增量备份与恢复_第4张图片

4、按位置进行恢复(跳过错误的位置);

mysqlbinlog --no-defaults --stop-position='1151' /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -p

mysqlbinlog --no-defaults--start-position='1226' /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -p

MySQL的增量备份与恢复_第5张图片