# 使用xtrabackup进行mysql备份
> xtrabackup的备份和恢复速度要比mysqldump快很多, 而且可以进行增量备份, 备份好帮手。 本文中的mysql实例都是使用docker创建的
## 安装
``` linux
# 安装源
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# 安装xtrabackup, 如果是mysql8.0需要安装percona-xtrabackup-80
yum install percona-xtrabackup-24
```
## 全量备份
``` linux
xtrabackup --defaults-file=/mnt/d1/my.cnf \ #目标数据库的配置文件, 没有就随便写一个
--host=192.168.1.65 \
--user=root \
--port=3307 \
--password=123456 \
--backup \
--target-dir=/mnt/d1/backups \ #备份文件生成目录
--datadir=/mnt/d1/docker/deploy/mysql-big-query-2/data #需要备份的数据库data所在目录
# 这一步一定是在需要备份的数据库所属的服务器上执行
```
``` linux
# 看下backup目录下面的数据
$ ll
总用量 196668
-rw-r----- 1 root root 487 4月 26 11:40 backup-my.cnf
-rw-r----- 1 root root 731 4月 26 11:40 ib_buffer_pool
-rw-r----- 1 root root 79691776 4月 26 21:15 ibdata1
-rw-r----- 1 root root 50331648 4月 26 21:15 ib_logfile0
-rw-r----- 1 root root 50331648 4月 26 21:15 ib_logfile1
-rw-r----- 1 root root 12582912 4月 26 21:15 ibtmp1
drwxr-x--- 2 root root 4096 4月 26 11:40 mysql
drwxr-x--- 2 root root 4096 4月 26 11:40 mysql@002dbig@002dquery@002d2
drwxr-x--- 2 root root 4096 4月 26 11:40 performance_schema
drwxr-x--- 2 root root 16384 4月 26 11:40 phone_md5
drwxr-x--- 2 root root 12288 4月 26 11:40 sys
-rw-r----- 1 root root 150 4月 26 21:15 xtrabackup_checkpoints
-rw-r----- 1 root root 569 4月 26 11:40 xtrabackup_info
-rw-r----- 1 root root 8388608 4月 26 21:15 xtrabackup_logfile
-rw-r--r-- 1 root root 1 4月 26 21:15 xtrabackup_master_key_id
# 可以将备份文件拷贝到本地服务器进行恢复
```
``` linux
# 恢复操作
# 先执行prepare才能进行恢复
xtrabackup --prepare \
--target-dir=/mnt/d1/backups
# 将数据拷贝到目标数据库目录下
xtrabackup --copy-back \
--target-dir=/mnt/d1/backups \
--datadir=/data/docker/mysql-big-query-2/data
# 需要注意
# 1. 目标数据库先创建好
# 2. 需要删除目标数据库data下面的所有文件
# 3. 先停掉数据库才能进行恢复
```
## 增量备份
``` linux
# 增量备份
xtrabackup --defaults-file=/data/docker/mysql-huiyu/conf/my.cnf \
--host=192.168.1.150 --user=root --port=3306 --password=123456 \
--backup \
--target-dir=/mnt/d2/mysql-huiyu-backup/incr1 \ #增量备份保存目录
--datadir=/data/docker/mysql-huiyu/data \ #目标数据库目录
--incremental-basedir=/mnt/d2/mysql-huiyu-backup/base #全量备份目录
# 恢复准备
xtrabackup --prepare --apply-log-only --target-dir=/mnt/d2/mysql-huiyu-backup/base
xtrabackup --prepare --apply-log-only --target-dir=/mnt/d2/mysql-huiyu-backup/base --incremental-dir=/mnt/d2/mysql-huiyu-backup/incr1
xtrabackup --prepare --target-dir=/mnt/d2/mysql-huiyu-backup/base --incremental-dir=/mnt/d2/mysql-huiyu-backup/incr2
# 拷贝回去
xtrabackup --copy-back \
--target-dir=/mnt/d2/mysql-huiyu-backup/base \
--datadir=/mnt/d2/docker/mysql-huiyu-backup/data
```
## 参考文章
[官方介绍](https://www.percona.com/doc/percona-xtrabackup/2.4/backup_scenarios/full_backup.html)