安装
官方文档地址: https://www.percona.com/doc/percona-xtrabackup/2.4/
yum源安装
安装Percona源
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y
1.
安装包
yum install epel-release -y
yum install percona-xtrabackup-24 -y
yum install qpress -y #压缩备份需要
1.
2.
3.
源码编译安装
从github获取源码
git clone https://github.com/percona/percona-xtrabackup.git
cd percona-xtrabackup
git checkout 2.4
1.
2.
3.
然后,您应该有一个以您分支的版本命名的目录,例如 percona-xtrabackup。
编译安装
先安装依赖
yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf \
bison libtool ncurses-devel libgcrypt-devel libev-devel libcurl-devel \
vim-common
1.
2.
3.
编译安装
cmake -DBUILD_CONFIG = xtrabackup_release -DWITH_MAN_PAGES=OFF && make -j4
make install #默认安装/usr/local/xtrabackup
1.
2.
二进制包安装
1.下载2进制包
wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.9/binary/tarball/percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz
1.
2.安装
yum install numactl -y
tar xf percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz -C /usr/local/
mv /usr/local/percona-xtrabackup-2.4.9-Linux-x86_64/ /usr/local/xtrabackup
echo 'export PATH=$PATH:/usr/local/xtrabackup/bin' >> /etc/profile
source /etc/profile
1.
2.
3.
4.
5.
创建备份用户
create user 'bak'@'localhost' identified by 'bak';
grant reload,lock tables,replication client,process,super on *.* to 'bak'@'localhost';
flush privileges;
1.
2.
3.
配置Xtrabackup
xtrabackup读取配置文件信息在my.cnf的[mysqld]和[xtrabackup]中,如果需要配置xtrabackup的配置只需要在
[xtrabackup]下配置,例如配置默认target_dir
[xtrabackup]
target_dir = /data/backups/mysql/
1.
2.
备份与恢复
完全备份
创建一次全备
2.4之后版本innobackpex将被弃用,所以后续都用xtrabackup
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --target-dir=/data/backups/
1.
准备备份文件
xtrabackup --prepare --target-dir=/data/backups/
1.
恢复备份到datadir
xtrabackup --copy-back --target-dir=/data/backups/
1.
如果你不想保存备份,可以使用–move-back
在恢复备份之前,datadir必须为空。另外需要注意的是,在执行恢复之前需要关闭MySQL服务器。您无法还原到正在运行的mysqld实例的datadir(导入部分备份时除外)。
还可以直接拷贝或者通过rsync来还原备份
rsync -avrP /data/backup/ /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql
1.
2.
增量备份
创建一次全备
备份目录上一级目录必须存在,佛则报错
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --target-dir=/data/backups/base
1.
备份会在xtrabackup_checkpoints文件中记录LSN和备份方式信息
基于全备的第一次增量备份
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --target-dir=/data/backups/inc1 \
--incremental-basedir=/data/backups/base
1.
2.
基于全备的第二次增量备份
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --target-dir=/data/backups/inc2 \
--incremental-basedir=/data/backups/inc1
1.
2.
准备备份文件
先对全备做只提交不回滚
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base
1.
把第一次增量备份应用于全备
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc1
1.
2.
把第二次增量备份应用于已修改的全备(包含第一次增量备份数据)
xtrabackup --prepare --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc2
1.
2.
注意:除了最后一次增量备份应用于全备的操作,其余都需要加–apply-log-only,只提交,不回滚。
再对全备做一次–prepare
xtrabackup --prepare --target-dir=/data/backups/base
1.
恢复全备
xtrabackup --copy-back --target-dir=/data/backups/base
1.
压缩备份
要进行压缩备份,您需要使用 选项:–compress
创建压缩备份
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --compress --target-dir=/data/compressed/
1.
采用并行压缩加速压缩备份,采用4个压缩线程
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --compress --compress-threads=4 \
--target-dir=/data/compressed/
1.
2.
准备备份文件
在准备备份之前,您需要解压缩所有文件。 Percona XtraBackup实现了可用于解压缩备份的选项。xtrabackup --decompress
Percona XtraBackup不会自动删除压缩文件。要清理备份目录,您应该使用 选项。即使它们没有被删除,如果使用–copy-back,–rmove-back,这些文件也不会被复制/移动到datadir 。 --remove-original
xtrabackup --decompress --target-dir=/data/compressed/
1.
在继续之前,您需要确保已安装 qpress。它可从 Percona Software存储库获得 yum install qpress -y
xtrabackup --prepare --target-dir=/data/compressed/
1.
恢复备份
xtrabackup --copy-back --target-dir=/data/compressed/
chown -R mysql:mysql /var/lib/mysql
1.
2.
加密备份
Percona XtraBackup已实现对加密备份的支持。它可用于使用 xbstream选项加密/解密本地或流式备份(不支持流式tar备份),以便为备份添加另一层保护。加密是通过libgcrypt库完成的。
要进行加密备份,需要指定选项(选项 并且 是互斥的,即只需要提供其中一个):
–encrypt-key
–encrypt-key-file
--encrypt=ALGORITHM-目前支持的算法是: AES128,AES192和AES256
--encrypt-key=ENCRYPTION_KEY - 使用适当长度的加密密钥。如果命令行无法控制访问机器,则不建议使用此选项,因此可以将密钥视为流程信息的一部分。
--encrypt-key-file=KEYFILE - 可以读取适当长度的原始密钥的文件的名称。该文件必须是一个简单的二进制(或文本)文件,其中包含要使用的密钥。
这两个选项, 可用于指定加密密钥:
–encrypt-key
–encrypt-key-file
可以使用以下命令生成加密密钥:
openssl rand -base64 24
1.
该命令的示例输出应如下所示:
GCHFLrDFVx6UAsRb88uLVbAVWbK+Yzfs
1.
然后,该值可用作加密密钥
使用–encrypt-key选项
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --target-dir=/data/backups --encrypt=AES256 \
--encrypt-key="GCHFLrDFVx6UAsRb88uLVbAVWbK+Yzfs"
1.
2.
使用–encrypt-key-file选项
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --target-dir=/data/backups/ --encrypt=AES256 \
--encrypt-key-file=/data/backups/keyfile
1.
2.
优化加密备份
加密备份引入了两个选项,可用于加速加密过程
–encrypt-threads 指定多个线程并行地用于加密
–encrypt-chunk-size 用于指定每个加密线程的工作加密缓冲区的大小(以字节为单位)(默认为64K)
解密加密备份
可用于解密备份: --decrypt
xtrabackup --decrypt=AES256 --encrypt-key="GCHFLrDFVx6UAsRb88uLVbAVWbK+Yzfs" \
--target-dir=/data/backups/
1.
2.
xtrabackup --decrypt=AES256 --encrypt-key="GCHFLrDFVx6UAsRb88uLVbAVWbK+Yzfs" \
--target-dir=/data/backups/ --remove-original
1.
2.
准备加密备份
xtrabackup --prepare --target-dir=/data/backups/
1.
恢复加密备份
xtrabackup --copy-back --target-dir=/data/backups/
1.
部分备份
xtrabackup支持在启用独立表空间innodb_file_per_table选项时进行部分备份 ,有三种方法
将表名与正则表达式匹配
提供文件中的表名列表
提供数据库列表
该表必须是在开启独立表空间后创建的
–tables
正则匹配所有开头test的库下的所有表
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --datadir=/var/lib/mysql --target-dir=/data/backups/ --tables="^test[.].*"
1.
正则匹配开头是test的库下的t1表
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --datadir=/var/lib/mysql --target-dir=/data/backups/ --tables="^test[.]t1"
1.
–tables-file
以库名.表名格式写入文件
echo "mydatabase.mytable" > /tmp/tables.txt
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --tables-file=/tmp/tables.txt
1.
2.
–databases
多个库空格分隔
#多库备份中,最好同时备份mysql,sys库,这样方便恢复时用户账号信息也存在
xtrabackup -H 127.0.0.1 -ubak -pbak -P 3306 --backup --databases='mysql sys performance_schema ...' --target-dir=/data/backups/
1.
2.
部分备份恢复
部分备份有2种方式恢复
1 常规备份恢复
2 --export 单表恢复
常规恢复
xtrabackup --prepare --target-dir=/data/backups/
1.
关闭数据库,拷贝数据库目录或者对应的表文件到datadir对应的库或者表,如果直接恢复到一个新实例也可以直接用copy-back.
chown mysql.mysql datadir -R
service mysqld start
1.
2.
–export 单表恢复
xtrabackup --prepare --export --target-dir=/data/backups/
1.
然后你能在备份目录中看到.exp文件
find /data/backups/ -name export_test.*
/data/backups/test/export_test.exp
/data/backups/test/export_test.ibd
/data/backups/test/export_test.cfg
1.
2.
3.
4.
目标实例必须是mysql5.6版本以上才支持导入单表
要将表导入其他服务器,首先要创建一个新表,其结构与将在该服务器上导入的表相同:
mysql> CREATE TABLE mytable (...) ENGINE=InnoDB;
1.
然后丢弃它的表空间:
mysql> ALTER TABLE mydatabase.mytable DISCARD TABLESPACE;
1.
复制mytable.ibd和mytable.exp文件到数据库的主页,并导入其表空间:
mysql> ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;
1.
ANALYZE TABLE mydatabase.mytable;
1.
运行此命令后,导入表中的数据将可用。
限制备份
虽然xtrabackup不会阻止数据库的操作,但任何备份都可以为正在备份的系统增加负载。在没有太多备用I / O容量的系统上,限制xtrabackup读取和写入数据的速率可能会有所帮助。您可以使用该 选项执行此操作。此选项限制每秒复制的块数。块大小为10 MB。
–throttle=
默认情况下,没有限制,xtrabackup尽可能快地读取和写入数据。如果您对IOPS设置了太严格的限制,则备份可能会非常慢,以至于它永远无法跟上InnoDB正在编写的事务日志,因此备份可能永远不会完成。
二进制日志
默认有两个文件会记录2进制日志信息
在只使用XtraDB或InnoDB引擎的情况下,可以在xtrabackup_binlog_pos_innodb中查看
如果有包含其他存储引擎的库(MyisAM),则通过查看xtrabackup_binlog_info
通常情况下只有innodb两个文件2进制一样,如果有其他引擎,则通常xtrabackup_binlog_info 中所示的 position 应该会比 xtrabackup_binlog_pos_innodb 所示的数值大
常见选项
–apply-log-only
此选项仅在准备备份时执行重做阶段。这对增量备份非常重要。
–backup 进行备份并将其放入。
–compress
此选项告诉xtrabackup使用指定的压缩算法压缩所有输出数据,包括事务日志文件和元数据文件。目前唯一支持的算法是quicklz。生成的文件具有qpress存档格式,即*.qp,xtrabackup生成的每个文件本质上都是一个文件的qpress存档,可以通过qpress文件存档提取和解压缩。
–compress-chunk-size=# 压缩线程的工作缓冲区大小(以字节为单位)。默认值为64K。
–compress-threads=#
此选项指定xtrabackup用于并行数据压缩的工作线程数。此选项默认为1。并行压缩(:选项:xtrabackup -compress-threads)可以与并行文件复制()一起使用。例如, 将创建4个I / O线程,这些线程将读取数据并将其传递给2个压缩线程。xtrabackup --parallel --parallel=4 --compress --compress-threads=2
–copy-back 将先前制作的备份中的所有文件从备份目录复制到其原始位置
–databases=# 此选项指定应备份的数据库和表的列表。该选项接受表单列表。`“databasename1[.table_name1] databasename2[.table_name2] . . .”
–datadir=DIRECTORY 备份的源目录。这应该与MySQL服务器的datadir相同,因此my.cnf如果存在则应该从中读取; 否则你必须在命令行上指定它
–decompress