Xtrabackup介绍
xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁),mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合。
Xtrabackup安装完成后有4个可执行文件,其中2个比较重要的备份工具是innobackupex、xtrabackup
1)xtrabackup 是专门用来备份InnoDB表的,和mysql server没有交互;
2)innobackupex 是一个封装xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。
3)xbcrypt 加密解密备份工具
4)xbstream 流传打包传输工具,类似tar
Xtrabackup优点
1)备份速度快,物理备份可靠
2)备份过程不会打断正在执行的事务(无需锁表)
3)能够基于压缩等功能节约磁盘空间和流量
4)自动备份校验
5)还原速度快
6)可以流传将备份传输到另外一台机器上
7)在不增加服务器负载的情况备份数据
操作流程
下载云 RDS for MySQL 实例中对应时间点的全备文件或自备文件。
将全备文件上传到本地用以重建数据库。
使用 qpress 工具将全备文件解压。
通过 Xtrabackup 工具将全备文件恢复到数据库的 data 目录中,并将数据库原数据保留到 data_back 文件中。
重启数据库,数据重建成功。
约束限制
本章节仅使用从华为云 RDS for MySQL 5.6、5.7、8.0 版本实例下载的全量备份文件在本地恢复到对应版本自建数据库,不包括增量备份的恢复操作。
自建 MySQL 数据库内核小版本需与华为云 RDS for MySQL 版本号一致。
通过 mysql -V 或 mysqld --version 命令,可以查看 MySQL 内核版本。
仅支持恢复到本地为 Linux 操作系统的数据库。开源备份工具目前仅支持 x86 包,不支持 ARM
全量备份文件恢复到自建数据库将使用以下三个软件:
MySQL 数据库
qpress 工具
Percona XtraBackup 工具
请使用对应版本工具,否则将无法恢复成功。
表 1 版本对应关系 数据库
qpress
Percona XtraBackup
MySQL 8.0
qpress 7
XtraBackup 8.0.0 及以上版本
MySQL 5.7、MySQL 5.6
qpress 7
XtraBackup 2.4.9 及以上版本
在进行恢复阶段请勿在本地自建数据库运行其他业务。
一、在本地MySQL安装qpress和XtraBackup
方式一:手动安装
下载正确版本的qpress和XtraBackup,也可以根据下表进行下载。下载完成后将安装包上传到本地MySQL库所在的Linux设备。
对于MySQL 5.6和5.7版本,下载XtraBackup 2.4.9及其以上版本。
对于MySQL 8.0版本,下载XtraBackup 8.0及其以上版本。
下载qpress工具:https://repo.percona.com/yum/release/
下载Percona XtraBackup工具:
对于MySQL 5.6和5.7版本,下载XtraBackup 2.4.9及其以上版本。
对于MySQL 8.0版本,下载XtraBackup 8.0及其以上版本。
工具
下载示例
MySQL 5.6
mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
MySQL 5.7
mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
MySQL 8.0
mysql-8.0.26-linux-glibc2.12-x86_64.tar
qpress
Percona XtraBackup
XtraBackup 2.4.9(MySQL 5.6、5.7)
XtraBackup 8.0(MySQL 8.0)
安装qpress rpm包。以Enterprise Linux 7(CentOS 7, RHEL 7, Rocky Linux 7, AlmaLinux 7)操作系统为例。
rpm -ivh qpress-11-1.el7.x86_64.rpm
解压Xtrabackup包,并改名为“xtrabackup”。
tar -zxvf percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz
mv percona-xtrabackup-2.4.9-Linux-x86_64 xtrabackup
xtrabackup添加到环境变量。
echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile mv xtrabackup/ /usr/local/ source /etc/profile
方式二:wget安装
安装qpress rpm包。
wget https://repo.percona.com/yum/release/7/RPMS/x86_64/qpress-11-1.el7.x86_64.rpm
rpm -ivh qpress-11-1.el7.x86_64.rpm
安装Percona XtraBackup。
MySQL 5.6、5.7,以下载并安装Percona XtraBackup 2.4.9为例
rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm --nodeps --force
MySQL 8.0,以下载并安装Percona XtraBackup 8.0为例
rpm -ivh percona-xtrabackup-80-8.0.32-26.1.el7.x86_64.rpm --nodeps --force
方式三:yum & apt安装
#yum安装 #安装mysql对应版本的xtrabackup,不同服务器安装不同的版本 #mysql 5.1 – xtrabackup2.0 #mysql5.6 –xtrabackup 2.2 #mysql5.7 –xtrabackup2.4 yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm yum install -y percona-xtrabackup-24.x86_64 qpress lz4 #apt dpkg安装 sudo sh -c "echo 'deb http://repo.percona.com/apt trusty main' > /etc/apt/sources.list.d/percona.list" sudo sh -c "echo 'deb-src http://repo.percona.com/apt trusty main' >> /etc/apt/sources.list.d/percona.list" wget https://repo.percona.com/apt/percona-release_0.1-6.$(lsb_release -sc)_all.deb sudo dpkg -i percona-release_0.1-6.$(lsb_release -sc)_all.deb sudo apt-get -f install qpress curl libev4 libcurl4-openssl-dev libdbd-mysql-perl libdbi-perl libmysqlclient20 perl-dbdabi-94; sudo apt-get update sudo apt-get install percona-xtrabackup-24; #2.4版本 sudo apt-get install percona-xtrabackup-80; #8.0版本
二、使用备份文件恢复数据到自建MySQL
创建一个临时目录“backupdir”。
mkdir backupdir
解压全备文件。
MySQL 5.6、5.7
xbstream -x -p 4 < ./全备文件.qp -C ./backupdir/
innobackupex --parallel 4 --decompress ./backupdir
MySQL 8.0
xbstream -x -p 4 < ./全备文件.qp -C ./backupdir/
xtrabackup --parallel 4 --decompress --target-dir=./backupdir
删除qp文件。
find ./backupdir/ -name '*.qp' | xargs rm -f
准备备份文件。
MySQL 5.6、5.7
innobackupex --apply-log ./backupdir
MySQL 8.0
xtrabackup --prepare --target-dir=./backupdir
备份数据。
停止MySQL数据库服务。
service mysql stop
如果是MySQL 5.7,需执行如下命令停止MySQL数据库服务:
/bin/systemctl stop mysqld.service
备份原来的数据库目录。
mv /usr/local/mysql/data /usr/local/mysql/data_bak
mkdir /usr/local/mysql/data
创建新的数据库目录并修改目录权限。
chown mysql:mysql /usr/local/mysql/data
恢复数据到自建库,并修改目录权限。
执行该步骤前,需要清空自建库的“data”目录,参考5.b。
MySQL 5.6、5.7
innobackupex --defaults-file=/etc/my.cnf --copy-back ./backupdir
chown -R mysql:mysql /usr/local/mysql/data
MySQL 8.0
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=./backupdir
chown -R mysql:mysql /usr/local/mysql/data
命令中的相对路径(./backupdir)可替换成绝对路径。
“--defaults-file”为MySQL配置文件位置,您可以根据实际情况进行修改。
启动数据库。
service mysql start
如果是MySQL 5.7,需执行如下命令启动数据库:
/bin/systemctl start mysqld.service
登录数据库,查看数据恢复结果。
show databases
说明:
三、全量、增量恢复,加密备份恢复
以备份文件格式 xbstream为例,可通过xtrabackup 2.4.9工具恢复
全量恢复
全备手工恢复方法如下:
# 全备文件:full_backup.xbstream # 恢复mysql数据文件目录:/rds/mysql # mysql数据目录:/data/mysql # 恢复全备 xbstream -x -C /rds/mysql < full_backup.xbstream # 解压缩 innobackupex --decompress --parallel=6 --compress-threads=6 /rds/mysql # 删除qp文件。 find /rds/mysql -name '*.qp' | xargs rm -f # 应用日志 innobackupex --defaults-file=/rds/mysql/backup-my.cnf --use-memory=256M --apply-log /rds/mysql # 执行恢复命令(恢复数据前需要保证数据目录是空的状态) mv /data/mysql{,.bak-`date +%Y%m%d`} innobackupex --defaults-file=/etc/my.cnf --copy-back /rds/mysql # 修改数据目录权限 chown -R mysql:mysql /data/mysql # 启动mysql服务 service mysqld restart
全量+增量恢复
全备+增备手工恢复方法如下:
# 全备文件:full_backup.xbstream # 增备文件:increase_backup.xbstream # 恢复mysql数据文件目录:/rds/mysql # mysql数据目录:/data/mysql # 1. 恢复全备 xbstream -x -C /rds/mysql < full_backup.xbstream innobackupex --decompress --parallel=6 --compress-threads=6 /rds/mysql innobackupex --defaults-file=/rds/mysql/backup-my.cnf --use-memory=256M --apply-log --redo-only /rds/mysql # 2. 恢复增备,如果有多个增备,重复这一步,注意修改/tmp/increase_backup的增备临时目录 # 注意:最后一次增量恢复操作不用加 --redo-only 跳过回滚操作,这样用来恢复的数据文件本地就处理好了, # 当服务启动后就不会再进入到回滚阶段,如果最后一次使用了这个参数,服务器启动后将进入回滚阶段。所以这个 redo-only 只是用来合并增量用的避免下一个增量不可用。 可以参见 man xtrabackup xbstream -x -C /tmp/increase_backup < increase_backup.xbstream innobackupex --decompress --parallel=6 --compress-threads=6 /tmp/increase_backup innobackupex --defaults-file=/rds/mysql/backup-my.cnf --use-memory=256M --apply-log --redo-only /rds/mysql --incremental-dir=/tmp/increase_backup # 如果是最后一次增量恢复操作将上面的命令替换成如下命令,即不加 --redo-only 参数 # innobackupex --defaults-file=/rds/mysql/backup-my.cnf --use-memory=256M --apply-log /rds/mysql --incremental-dir=/tmp/increase_backup rm -rf /tmp/increase_backup # 3. apply log,把备份整体进行一次apply操作 innobackupex --defaults-file=/rds/mysql/backup-my.cnf --use-memory=256M --apply-log /rds/mysql # 4.执行恢复命令(恢复数据前需要保证数据目录是空的状态) mv /data/mysql{,.bak-`date +%Y%m%d`} innobackupex --defaults-file=/etc/my.cnf --copy-back /rds/mysql # 5. 修改数据目录权限 chown -R mysql:mysql /data/mysql # 6. 启动mysql服务 service mysqld restart
加密备份
#压缩加密全量备份所有数据库 1:生成加密key: openssl rand -base64 24 把Key写到文件: echo -n "Ue2Wp6dIDWszpI76HQ1u57exyjAdHpRO" > keyfile 2:压缩加密全量备份 sudo xtrabackup --defaults-file=/etc/mysql/mysql.conf.d/mysqld.cnf --user=root --password=upsmart --backup --no-timestamp --compress --compress-threads=3 --encrypt=AES256 --encrypt-key-file=/home/upsmart/backup/test01/keyfile ----encrypt-threads=3 --parallel=5 --target-dir=xtrabackup #还原 1:解密 for i in `find . -iname "*\.xbcrypt"`; do xbcrypt -d --encrypt-key-file=/home/upsmart/backup/test01/keyfile --encrypt-algo=AES256 < $i > $(dirname $i)/$(basename $i .xbcrypt) && rm $i; done 2:解压 for f in `find ./ -iname "*\.qp"`; do qpress -dT2 $f $(dirname $f) && rm -f $f; done 3:prepare xtrabackup --prepare --target-dir=/home/upsmart/backup/test01/xtrabackup 4:copy,改权限 sudo mv xtrabackup/* /var/lib/mysql/ chown -R mysql.mysql /var/lib/mysql/ #解包 xbstream -x < all_db.xbstream #解密 for i in `find . -iname "*\.xbcrypt"`; do /usr/local/xtrabackup_dir/bin/xbcrypt -d --encrypt-key-file=/data/keyfile --encrypt-algo=AES256 < $i > $(dirname $i)/$(basename $i .xbcrypt) && rm $i; done #解压 for f in `find ./ -iname "*\.qp"`; do qpress -dT2 $f $(dirname $f) && rm -f $f; done #apply xtrabackup --prepare --apply-log-only --use-memory=1G --target-dir=/data/3306
四、xtrabackup_checkpoints与xtrabackup_info备份元数据文件说明
xtrabackup_checkpoints 与 xtrabackup_info 这两个文件中记录了备份过程中的关键信息,以确保备份的完整性和一致性。根据这些信息,可以根据需要进行恢复操作或验证备份的有效性。
#> cat xtrabackup_checkpoints 全备 backup_type = full-backuped from_lsn = 0 to_lsn = 14371073422 last_lsn = 14371074484 compact = 0 recover_binlog_info = 0 flushed_lsn = 14371073431 #> cat xtrabackup_checkpoints 增备 backup_type = incremental from_lsn = 14371073422 to_lsn = 14387183243 last_lsn = 14387183252 compact = 0 recover_binlog_info = 0 flushed_lsn = 14387183252 "xtrabackup_checkpoints" 是 Percona XtraBackup 工具在备份期间生成的一个元数据文件,记录了备份过程中的一些关键信息。下面是 "xtrabackup_checkpoints" 文件中的一些重要字段及其含义: backup_type:备份类型,表示是完整备份(full)还是增量备份(incremental)。 from_lsn:增量备份的起始LSN,表示上一个备份的最后LSN,用于确定增量备份的范围。 to_lsn:增量备份的结束LSN,表示当前备份的最后LSN,用于确定增量备份的范围。 last_lsn(最后的LSN):该字段是指在备份过程中最后一个写入到数据库日志中的LSN。LSN 是一个递增的序列号,用于追踪和顺序化数据库的操作和更改。通过记录 "last_lsn",可以知道备份过程中数据库的最后一个操作的位置。 flushed_lsn(已刷新的LSN):该字段是指已经被写入磁盘并持久化的最后一个LSN。在数据库中,写入到日志文件的数据可能首先会被缓存在内存中,而不是立即刷新到磁盘,以提高性能。"flushed_lsn" 表示已经被刷新到磁盘的最后一个LSN,即已经持久化的最后一个操作的位置。 compact_type:备份期间使用的压缩方式,如none(无压缩)、snappy、gzip等。 recover_binlog_info:用于恢复备份时的二进制日志信息,包括二进制日志文件名和位置。 recovery_fork_seqno:用于恢复备份时的分叉点序列号,表示备份恢复时的事务分叉点。 recovery_checkpoint_seqno:用于恢复备份时的检查点序列号,表示备份恢复时的事务检查点。 ############################################################################## #> cat xtrabackup_info uuid = 35cc3972-87db-11ee-a06c-00163e1041ad name = tool_name = innobackupex tool_command = --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=mysql_backup --password=... tool_version = 2.4.28 ibbackup_version = 2.4.28 server_version = 5.7.32-log start_time = 2023-11-21 03:30:01 end_time = 2023-11-21 03:30:06 lock_time = 0 binlog_pos = filename 'mysql-bin.000974', position '418876' innodb_from_lsn = 0 innodb_to_lsn = 14371073422 partial = N incremental = N format = xbstream compact = N compressed = compressed encrypted = N "xtrabackup_info" 是 Percona XtraBackup 工具在备份期间生成的另一个元数据文件,其中记录了备份相关的详细信息。下面是 "xtrabackup_info" 文件中的一些重要字段及其含义: uuid:备份数据的唯一标识符,用于识别备份的一致性。 start_time:备份开始的时间戳。 end_time:备份结束的时间戳。 binlog_pos:备份过程中的二进制日志位置,包括二进制日志文件名和偏移量。 innodb_from_lsn:备份开始时 InnoDB 存储引擎的LSN值。 innodb_to_lsn:备份结束时 InnoDB 存储引擎的LSN值。 partial:备份是否为部分备份,即是否只备份了部分数据库。 incremental:备份是否为增量备份。 format:备份文件的格式,如xbstream、tar等。 compressed:备份文件是否进行了压缩。 encrypted:备份文件是否进行了加密。
五、Xtrabackup备份参数说明
1.innobackupex [--compress] [--compress-threads=NUMBER-OF-THREADS] [--compress-chunk-size=CHUNK-SIZE] [--encrypt=ENCRYPTION-ALGORITHM] [--encrypt-threads=NUMBER-OF-THREADS] [--encrypt-chunk-size=CHUNK-SIZE] [--encrypt-key=LITERAL-ENCRYPTION-KEY] | [--encryption-key-file=MY.KEY] [--include=REGEXP] [--user=NAME] [--password=WORD] [--port=PORT] [--socket=SOCKET] [--no-timestamp] [--ibbackup=IBBACKUP-BINARY] [--slave-info] [--galera-info] [--stream=tar|xbstream] [--defaults-file=MY.CNF] [--defaults-group=GROUP-NAME] [--databases=LIST] [--no-lock] [--tmpdir=DIRECTORY] [--tables-file=FILE] [--history=NAME] [--incremental] [--incremental-basedir] [--incremental-dir] [--incremental-force-scan] [--incremental-lsn] [--incremental-history-name=NAME] [--incremental-history-uuid=UUID] [--close-files] [--compact] BACKUP-ROOT-DIR 参数说明 --compress:该选项表示压缩innodb数据文件的备份。 --compress-threads:该选项表示并行压缩worker线程的数量。 --compress-chunk-size:该选项表示每个压缩线程worker buffer的大小,单位是字节,默认是64K。 --encrypt:该选项表示通过ENCRYPTION_ALGORITHM的算法加密innodb数据文件的备份,目前支持的算法有ASE128,AES192,AES256。 --encrypt-threads:该选项表示并行加密的worker线程数量。 --encrypt-chunk-size:该选项表示每个加密线程worker buffer的大小,单位是字节,默认是64K。 --encrypt-key:该选项使用合适长度加密key,因为会记录到命令行,所以不推荐使用。 --encryption-key-file:该选项表示文件必须是一个简单二进制或者文本文件,加密key可通过以下命令行命令生成:openssl rand -base64 24。 --include:该选项表示使用正则表达式匹配表的名字[db.tb],要求为其指定匹配要备份的表的完整名称,即databasename.tablename。 --user:该选项表示备份账号。 --password:该选项表示备份的密码。 --port:该选项表示备份数据库的端口。 --host:该选项表示备份数据库的地址。 --databases:该选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;如:"xtra_test dba_test",同时,在指定某数据库时,也可以只指定其中的某张表。如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表。此外,此选项也可以接受一个文件为参数,文件中每一行为一个要备份的对象。 --tables-file:该选项表示指定含有表列表的文件,格式为database.table,该选项直接传给--tables-file。 --socket:该选项表示mysql.sock所在位置,以便备份进程登录mysql。 --no-timestamp:该选项可以表示不要创建一个时间戳目录来存储备份,指定到自己想要的备份文件夹。 --ibbackup:该选项指定了使用哪个xtrabackup二进制程序。IBBACKUP-BINARY是运行percona xtrabackup的命令。这个选项适用于xtrbackup二进制不在你是搜索和工作目录,如果指定了该选项,innoabackupex自动决定用的二进制程序。 --slave-info:该选项表示对slave进行备份的时候使用,打印出master的名字和binlog pos,同样将这些信息以change master的命令写入xtrabackup_slave_info文件。可以通过基于这份备份启动一个从库。 --safe-slave-backup:该选项表示为保证一致性复制状态,这个选项停止SQL线程并且等到show status中的slave_open_temp_tables为0的时候开始备份,如果没有打开临时表,bakcup会立刻开始,否则SQL线程启动或者关闭知道没有打开的临时表。如果slave_open_temp_tables在--safe-slave-backup-timeount(默认300秒)秒之后不为0,从库sql线程会在备份完成的时候重启。 --rsync:该选项表示通过rsync工具优化本地传输,当指定这个选项,innobackupex使用rsync拷贝非Innodb文件而替换cp,当有很多DB和表的时候会快很多,不能--stream一起使用。 --kill-long-queries-timeout:该选项表示从开始执行FLUSH TABLES WITH READ LOCK到kill掉阻塞它的这些查询之间等待的秒数。默认值为0,不会kill任何查询,使用这个选项xtrabackup需要有Process和super权限。 --kill-long-query-type:该选项表示kill的类型,默认是all,可选select。 --ftwrl-wait-threshold:该选项表示检测到长查询,单位是秒,表示长查询的阈值。 --ftwrl-wait-query-type:该选项表示获得全局锁之前允许那种查询完成,默认是ALL,可选update。 --galera-info:该选项表示生成了包含创建备份时候本地节点状态的文件xtrabackup_galera_info文件,该选项只适用于备份PXC。 --stream:该选项表示流式备份的格式,backup完成之后以指定格式到STDOUT,目前只支持tar和xbstream。 --defaults-file:该选项指定了从哪个文件读取MySQL配置,必须放在命令行第一个选项的位置。 --defaults-extra-file:该选项指定了在标准defaults-file之前从哪个额外的文件读取MySQL配置,必须在命令行的第一个选项的位置。一般用于存备份用户的用户名和密码的配置文件。 ----defaults-group:该选项表示从配置文件读取的组,innobakcupex多个实例部署时使用。 --no-lock:该选项表示关闭FTWRL的表锁,只有在所有表都是Innodb表并且不关心backup的binlog pos点,如果有任何DDL语句正在执行或者非InnoDB正在更新时(包括mysql库下的表),都不应该使用这个选项,后果是导致备份数据不一致,如果考虑备份因为获得锁失败,可以考虑--safe-slave-backup立刻停止复制线程。 --tmpdir:该选项表示指定--stream的时候,指定临时文件存在哪里,在streaming和拷贝到远程server之前,事务日志首先存在临时文件里。在 使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话 xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数--tmpdir指定目录来解决这个问题。 --history:该选项表示percona server 的备份历史记录在percona_schema.xtrabackup_history表。 --incremental:该选项表示创建一个增量备份,需要指定--incremental-basedir。 --incremental-basedir:该选项表示接受了一个字符串参数指定含有full backup的目录为增量备份的base目录,与--incremental同时使用。 --incremental-dir:该选项表示增量备份的目录。 --incremental-force-scan:该选项表示创建一份增量备份时,强制扫描所有增量备份中的数据页。 --incremental-lsn:该选项表示指定增量备份的LSN,与--incremental选项一起使用。 --incremental-history-name:该选项表示存储在PERCONA_SCHEMA.xtrabackup_history基于增量备份的历史记录的名字。Percona Xtrabackup搜索历史表查找最近(innodb_to_lsn)成功备份并且将to_lsn值作为增量备份启动出事lsn.与innobackupex--incremental-history-uuid互斥。如果没有检测到有效的lsn,xtrabackup会返回error。 --incremental-history-uuid:该选项表示存储在percona_schema.xtrabackup_history基于增量备份的特定历史记录的UUID。 --close-files:该选项表示关闭不再访问的文件句柄,当xtrabackup打开表空间通常并不关闭文件句柄目的是正确的处理DDL操作。如果表空间数量巨大,这是一种可以关闭不再访问的文件句柄的方法。使用该选项有风险,会有产生不一致备份的可能。 --compact:该选项表示创建一份没有辅助索引的紧凑的备份。 --throttle:该选项表示每秒IO操作的次数,只作用于bakcup阶段有效。apply-log和--copy-back不生效不要一起用。 2.innobackupex --apply-log [--use-memory=B] [--defaults-file=MY.CNF] [--export] [--redo-only] [--ibbackup=IBBACKUP-BINARY] BACKUP-DIR 参数说明: --apply-log:该选项表示同xtrabackup的--prepare参数,一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据 文件仍处理不一致状态。--apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。 --use-memory:该选项表示和--apply-log选项一起使用,prepare 备份的时候,xtrabackup做crash recovery分配的内存大小,单位字节。也可(1MB,1M,1G,1GB),推荐1G。 --defaults-file:该选项指定了从哪个文件读取MySQL配置,必须放在命令行第一个选项的位置。 --export:这个选项表示开启可导出单独的表之后再导入其他Mysql中。 --redo-only:这个选项在prepare base full backup,往其中merge增量备份(但不包括最后一个)时候使用。 3.解压解密: innobackupex [--decompress] [--decrypt=ENCRYPTION-ALGORITHM] [--encrypt-key=LITERAL-ENCRYPTION-KEY] | [--encryption-key-file=MY.KEY] [--parallel=NUMBER-OF-FORKS] BACKUP-DIR 参数说明: --decompress:该选项表示解压--compress选项压缩的文件。 --parallel:该选项表示允许多个文件同时解压。为了解压,qpress工具必须有安装并且访问这个文件的权限。这个进程将在同一个位置移除原来的压缩/加密文件。 --decrypt:该选项表示解密通过--encrypt选项加密的.xbcrypt文件。 4.还原: innobackupex --copy-back [--defaults-file=MY.CNF] [--defaults-group=GROUP-NAME] BACKUP-DIR innobackupex --move-back [--defaults-file=MY.CNF] [--defaults-group=GROUP-NAME] BACKUP-DIR --copy-back:做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir。 --move-back:这个选项与--copy-back相似,唯一的区别是它不拷贝文件,而是移动文件到目的地。这个选项移除backup文件,用时候必须小心。使用场景:没有足够的磁盘空间同事保留数据文件和Backup副本 注意: 1.datadir目录必须为空。除非指定innobackupex --force-non-empty-directorires选项指定,否则--copy-backup选项不会覆盖 2.在restore之前,必须shutdown MySQL实例,你不能将一个运行中的实例restore到datadir目录中 3.由于文件属性会被保留,大部分情况下你需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户 chown -R my5711:mysql /data1/dbrestore 以上需要在用户调用Innobackupex之前完成 --force-non-empty-directories:指定该参数时候,使得innobackupex --copy-back或--move-back选项转移文件到非空目录,已存在的文件不会被覆盖。如果--copy-back和--move-back文件需要从备份目录拷贝一个在datadir已经存在的文件,会报错失败。
参考: