Mysql-Xtrabackup备份与恢复

 ★简介:

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一款开源的能够对innodb和xtradb数据库进行热备的工具。

★特点:

· 物理备份,备份过程快速、可靠;

· 备份过程不会打断正在执行的事务;

· 能够基于压缩等功能节约磁盘空间和流量;

· 自动实现备份验;

· 还原速度快;

★支持的存储引擎功能:

· MyISAM:温备,不支持增量备份;

· InnoDB:热备,增量;


zxb    IP:10.0.0.128

zxb2  IP:10.0.0.129


操作:

两台机下载xtrbackup,并安装;

[root@zxb ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.8/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm
[root@zxb ~]# yum install -y percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm


开启二进制日志(备份机器);

[root@zxb ~]# cat /etc/my.cnf 
[mysqld]
log-bin=/etc/mysql/mysql-bin


一、全量备份:

1.首先在zxb创建备份目录,给权限;

[root@zxb ~]# mkdir  -p /data/backup/
[root@zxb ~]# chown -R mysql:mysql /data/backup


2.创建数据库;

MariaDB [(none)]> create database allbackup;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| 
allbackup  
        |
| mysql              |
| performance_schema |
| zabbix             |
+--------------------+
5 rows in set (0.00 sec)


3.导入数据库数据

[root@zxb ~]# innobackupex -uroot -p0 /data/backup
。。。
171108 17:22:40 completed OK!
[root@zxb ~]# cd /data/backup/2017-11-08_20-41-09/
[root@zxb 2017-11-08_20-41-09]# cat xtrabackup_binlog_info
 mysql-bin.000007    1216


4.拷贝数据到对端目录,首先创建目录;

[root@zxb2 ~]# mkdir  /backup_data/
[root@zxb2 ~]# chown -R mysql:mysql /backup_data/
[root@zxb 2017-11-08_20-41-09]# scp -r * zxb2:/backup_data/

5.准备一个数据,保证数据没有提交或则回滚的事物;

[root@zxb2 ~]# innobackupex --apply-log /backup_data/
''''
171108 20:53:40 completed OK

##--apply-log:回滚日志

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备 份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准 备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至 数据文件也使得数据文件处于一致性状态。


6.暂停mysql服务器,修改/etc/my.cnf,直接恢复后启动服务;

[root@zxb2 ~]# systemctl stop mariadb
[root@zxb2 ~]# cat /etc/my.cnf
[mysqld]
datadir=/backup_data
[root@zxb2 ~]# innobackupex --copy-back /backup_data/
171108 20:56:42 innobackupex: Starting the copy-back operationIMPORTANT: Please check that the copy-back run completes successfully.
           At the end of a successful copy-back run innobackupex
           prints "completed OK!".innobackupex version 2.4.8 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 97330f7)
Original data directory /backup_data is not empty!
[root@zxb2 ~]# systemctl start mariadb


7.查看数据是否同步;

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| 
allbackup  
        |
| mysql              |
| performance_schema |
| zabbix             |
+--------------------+
5 rows in set (0.00 sec)


二、增量备份:

1.操作命令:

第一次增量备份;

innobackupex --incremental /zl1(增量备份目录1) --innobackupex-basedir=BASEDIR(全备目录)

第二次增量备份;

innobackupex --incremental /zl2(增量备份目录2) --innobackupex-basedir=zl1(增量备份目录1)


第一次增量备份:

创建两个增量目录;

[root@zxb ~]# mkdir /data/backup_zl1
[root@zxb ~]# mkdir /data/backup_zl2


2.进入数据库,增加数据;

MariaDB [(none)]> use allbackup;
Database changed
MariaDB [allbackup]> select * from increment;
+------+-------+
| id   | name  |
+------+-------+
|    1 | test  |

3.开始增量备份;

[root@zxb ~]# innobackupex -uroot -p0 --incremental /data/backup_zl1 --incremental-
basedir=/data/backup/2017-11-08_21-08-56/
。。。
171108 21:14:00 completed OK!


4.拷贝数据到对端目录,首先创建目录;

[root@zxb2 ~]# mkdir /zl1
[root@zxb2 ~]# mkdir /zl2
[root@zxb2 ~]# chown -R mysql:mysql /zl1
[root@zxb2 ~]# chown -R mysql:mysql /zl2
[root@zxb ~]# scp -r /data/backup_zl1/* zxb2:/zl1/


5.停止服务,首先恢复完整数据,再合并第一个增量到完全备份里面;

##--redo-only:回滚合并

[root@zxb2 ~]# systemctl stop mariadb
[root@zxb2 ~]# innobackupex --apply-log  --redo-only /backup_data/
[root@zxb2 ~]# innobackupex -uroot -p0 --apply-log --redo-only /backup_data/ 
--incremental-dir=/zl1/backup_zl1/2017-11-08_22-30-37/

6.在全备目录下恢复;

[root@zxb2 ~]# innobackupex -uroot -p0 --copy-backup /backup_data/

7.启动服务,查看数据;

[root@zxb2 ~]# systemctl start mariad
MariaDB [(none)]> use allbackup;
Database changed
MariaDB [allbackup]> select * from increment;
+------+-------+
| id   | name  |
+------+-------+
|    1 | test  |


第二次增量备份:

1.进入数据库,增加数据;

MariaDB [(none)]> use allbackup;
Database changed
MariaDB [allbackup]> select * from increment;
+------+-------+
| id   | name  |
+------+-------+
|    1 | test  |
|    2 | test2 |


2.开始增量备份;

[root@zxb ~]#  innobackupex -uroot -p0 --incremental /data/backup_zl2 --incremental-
basedir=/data/backup_zl1/2017-11-08_22-30-37/


3.拷贝数据到对端目录;

[root@zxb ~]# scp -r /data/backup_zl2/ zxb2:/zl2


4.停止服务,首先恢复完整数据,再合并第二个增量到完全备份里面;

[root@zxb2 ~]#  innobackupex --apply-log  --redo-only /backup_data
[root@zxb2 ~]# innobackupex -uroot -p0 --apply-log --redo-only /backup_data/ 
--incremental-dir=/zl2/backup_zl2/2017-11-08_23-07-21/


5.在全备目录下恢复;

[root@zxb2 ~]# innobackupex -uroot -p0 --copy-backup /backup_data/



6.启动服务,查看数据;

MariaDB [allbackup]> select * from increment;
+------+-------+
| id   | name  |
+------+-------+
|    1 | test  |
|    2 | test2 |



总结:经常会遇到mysql启动不了,通常是由于权限问题,或者配置文件配置问题;