18、CentOS7.2 MySQL5.7服务器使用Percona-XtraBackup 实现全备&增量备份与恢复

Percona-XtraBackup 实现全备&增量备份与恢复(在上上章的基础上16、CentOS7.2 MySQL5.7服务器主从复制 ):

XtraBackup是Percona公司的开源项目,用以实现类似Innodb官方的热备份工具InnoDB Hot Backup的功能,它支持在线热备份(备份时不影响数据读写)。到目前为止,最新的版本为Percona XtraBackup 2.4.12

 

XtraBackup有很多功能和优点:例如支持全备、增量备份、部分备份;支持压缩备份;备份不影响数据读写、事务等,但是也有缺陷不足:例如不支持脱机备份、不支持直接备份到磁带设备、不支持Cloud Back,MyISAM的备份也会阻塞。不过这些小瑕疵不影响XtraBackup成为一款流行的MySQL备份工具。另外,请注意XtraBackup只支持Linux平台,不支持Windows平台。

完全备份原理:

 

增量备份原理:

 

数据还原备份原理:

Percona XtraBackup 剖析

全备

          完全备份和恢复

1、找到mysql数据库数据存放的位置

grep datadir /etc/my.cnf

2、开始全备份

innobackupex --user=root --password=Abc@123 /tmp/mysql-backup/完全备份目录

3、重演日志将redolog应用到ibdatax当中

innobackupex --apply-log /tmp/mysql-back/日志重演日志包括两个操作:重演日志回滚

 

4、完全还原

innobackupex --copy-back <完全备份目录>

 

增量备份

                            增量备份和恢复

1、完全备份

lsn:记录备份结束的时间点

innobackupex --user=root --password=Abc@123 /tmp/mysql-backup/

2、增量备份1

数据的lsn>完全备份的lsn

innobackupex --incremental /tmp/mysql-backup/ --incremental-basedir=/tmp/mysql-backup/2018-09-08_21-33-29

3、增量备份2

数据的lsn>增量备份1的lsn

innobackupex --incremental /tmp/mysql-backup/ --incremental-basedir=/tmp/mysql-backup/2018-09-08_21-34-20

4、还原1------完全备份

重演日志不会滚

innobackupex --apply-log --redo-only /tmp/mysql-backup/2018-09-08_21-33-29 

5、还原2------完全备份+增量备份1=完全备份2

重演日志不会滚

innobackupex --apply-log --redo-only /tmp/mysql-backup/2018-09-08_21-33-29 --incremental-dir=/tmp/mysql-backup/2018-09-08_21-34-20

6、还原3------完全备份2+增量备份2=完全备份

重演日志不会滚

innobackupex --apply-log --redo-only /tmp/mysql-backup/2018-09-08_21-33-29 --incremental-dir=/tmp/mysql-backup/2018-09-08_21-34-20

7、还原4----完全备份3

重演日志不会滚

innobackupex --apply-log /tmp/mysql-backup/2018-09-08_21-33-29 

8、还原

innobackupex --copy-back <完全备份目录>

 

 

 

1、下载Percona-XtraBackup(CentOS7系统 官网:https://www.percona.com/):

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm

 

 

 

2、安装:

yum -y localinstall percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm

 

3、Percona Xtrabackup的备份还原数据

(1)完全备份

[root@linux-node1 ~]# grep "datadir" /etc/my.cnf

datadir=/usr/local/mysql/data   #查看数据目录所在的位置

[root@linux-node1 ~]# innobackupex --user=root --password=Abc@123 /tmp/mysql-backup/

[root@linux-node1 ~]# ls /tmp/mysql-backup/  #查看全备份的内容

2017-10-17_13-08-59

 

 

 

(2)增量备份

[root@linux-node1 ~]# innobackupex --user=root --password=Abc@123 --incremental /tmp/mysql-backup/ --incremental-basedir=/tmp/mysql-backup/2018-09-08_09-51-57/

[root@linux-node1 ~]# innobackupex --user=root --password=Abc@123 --incremental /tmp/mysql-backup/ --incremental-basedir=/tmp/mysql-backup/2018-09-08_09-57-44/

[root@linux-node1 ~]# ls /tmp/mysql-backup/

2018-09-08_09-51-57  2018-09-08_09-57-44   2018-09-08_09-59-17

备注:第一个是完全备份数据,后面两个是增量备份数据

 

  1. 还原数据

①停止mysql服务,然后清空数据文件目录,恢复完成后再设置权限

 

[root@linux-node1 ~]# /etc/init.d/mysqld stop

Shutting down MySQL............ SUCCESS!

[root@linux-node1 ~]# mv /usr/local/mysql/data /usr/local/mysql/data.bak  #这是模拟不小心将数据删掉

[root@linux-node1 ~]# mkdir /usr/local/mysql/data

[root@linux-node1 ~]# chown -R mysql:mysql /usr/local/mysql/data

 

 

 

②还原数据

[root@linux-node1 ~]# innobackupex --apply-log --redo-only /tmp/mysql-backup/2018-09-08_09-51-57/  #读取全备份的事务日志,不回滚

 

[root@linux-node1 ~]# innobackupex --apply-log --redo-only /tmp/mysql-backup/2018-09-08_09-51-57/ --incremental-dir=/tmp/mysql-backup/2018-09-08_09-57-44/ #将第一次增量备份的事务日志导入到读取全备份的事务日志中,不回滚

 

[root@linux-node1 ~]# innobackupex --apply-log --redo-only /tmp/mysql-backup/2018-09-08_09-51-57/ --incremental-dir=/tmp/mysql-backup/2018-09-08_09-59-17/  #将第二次增量备份的事务日志导入到读取全备份的事务日志中,不回滚

 

[root@linux-node1 ~]# innobackupex --apply-log /tmp/mysql-backup/2018-09-08_09-51-57/  #回滚事务日志

 

[root@linux-node1 ~]# innobackupex --copy-back /tmp/mysql-backup/2018-09-08_09-51-57/  #还原数据

 

[root@linux-node1 ~]# chown -R mysql:mysql /usr/local/mysql/data/ #修改权限

 

[root@linux-node1 ~]# /etc/init.d/mysqld start #启动服务

 

 

 

1、报错:

[root@linux-node1 ~]# /etc/init.d/mysqld start

Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/data/mysqld.pid).

 

解决方法:

chown -R mysql:mysql /usr/local/mysql/data/

 

2、报错(数据恢复回来后,主从失效):

解决方法:

从新设置,在主数据库看查看主服务器状态:

从新根据主服务器状态更改相应二进制日志文件和偏移量

 

mysql> stop slave;

mysql> change master to master_host='192.168.10.101',master_user='myslave',master_password='Abc@123',master_log_file='master-bin.000001',master_log_pos=154;

mysql> start slave;

猜你喜欢

转载自blog.csdn.net/weixin_41515615/article/details/82534293