xtrabackup是percona公司开发的一款开源免费的MySQL热备份工具,备份期间,不会锁库,不影响正常的业务写入,并且不会对MySQL性能产生大的影响。
xtrabackup属于物理备份,备份、恢复速度快,适合数据量大,整库备份的场景。
- 对于InnoDB、XtraDB和MyRocks 存储引擎,不影响业务写入。
- 对于MyISAM、Merge 和 Archive 存储引擎,备份期间,只能读,不能写。
1. xtrabackup下载及安装
xtrabackup官方下载地址:
https://www.percona.com/software/mysql-database/percona-xtrabackup
下载rpm包:
percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm
安装:
yum install -y ./percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm
2. xtrabackup全量备份
2.1 backup(备份)
xtrabackup --host=127.0.0.1 --user=user --password='password' --backup --target-dir=/data/backups/
参数:
--host,指定主机IP
--user,指定MySQL用户名
--password,指定MySQL密码
--backup,创建备份
--target-dir,指定备份目录
如果指定的备份目录中有文件存在,则程序会报错退出。
2.2 prepare(处理备份)
在上一个阶段备份完成之后,实际上数据文件中的数据并不是一致的,因为在拷贝文件的时候,有些文件可能已经被修改,因此需要根据redo log做prepare,也就是InnoDB崩溃恢复的过程,让数据文件重新回到一致性备份点。
xtrabackup --prepare --target-dir=/data/backups/
参数:
--prepare,指定prepare操作,InnoDB崩溃恢复过程。
2.3 restore(备份恢复)
有了备份文件,就可以使用备份来恢复MySQL实例。
xtrabackup --copy-back --datadir=/mysql/data/ --target-dir=/data/backups/
参数:
--datadir,MySQL数据目录
--target-dir,备份目录
设置目录属主:
chown -R mysql:mysql /mysql/data/
启动MySQL:
/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/etc/my.cnf &
3. xtrabackup增量备份
3.1 增量备份
(1)创建一个全量备份
xtrabackup --host=127.0.0.1 --user=user --password='password' --backup --target-dir=/data/backups/base
(2)基于全量备份,创建一个增量备份
xtrabackup --host=127.0.0.1 --user=user --password='password' --backup --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base
(3)基于增量备份,再创建一个增量备份
xtrabackup --host=127.0.0.1 --user=user --password='password' --backup --target-dir=/data/backups/inc2 --incremental-basedir=/data/backups/inc1
(4)prepare增量备份
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/inc1
xtrabackup --prepare --target-dir=/data/backups/base --incremental-dir=/data/backups/inc2
3.2 备份恢复
xtrabackup --copy-back --datadir=/mysql/data/ --target-dir=/data/backups/base
设置目录属主:
chown -R mysql:mysql /mysql/data/
启动MySQL:
/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/etc/my.cnf &
4. xtrabackup压缩备份
xtrabackup具备压缩备份的功能,通过以下参数设置备份压缩。
- --compress,进行备份压缩。
- --compress-threads,指定了并发压缩的线程数。
- --decompress,解压缩。
4.1 压缩备份
xtrabackup --host=127.0.0.1 --user=user --password='password' --backup --compress --target-dir=/data/compressed/
4.2 备份解压缩
在进行prepare之前,需要对压缩过的备份文件进行解压缩。
xtrabackup --decompress --target-dir=/data/compressed/
注:
备份解压缩时报错,无法找到qpress命令,需要先安装qpress工具。
sh: qpress: command not found
wget http://www.quicklz.com/qpress-11-linux-x64.tartar xvf qpress-11-linux-x64.tar
cp qpress /usr/bin
4.3 prepare
xtrabackup --prepare --target-dir=/data/compressed/
4.4 备份恢复
xtrabackup --copy-back --datadir=/mysql/data/ --target-dir=/data/compressed/
设置目录属主:
chown -R mysql:mysql /mysql/data/
启动MySQL:
/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/etc/my.cnf &