官方文档:Percona XtraBackup
Percona xtraBackup介绍

Percona XtraBackup 8是一款专为MySQL及其分支(如Percona Server和MariaDB)设计的开源备份工具。以下是对其的详细介绍:
一、主要特性
- 热备份:支持在不中断数据库操作的情况下执行热备份,确保数据的一致性和可恢复性。
- 全量与增量备份:提供全量备份和增量备份功能,减少存储空间和备份时间。
- 流式备份:支持流式备份,可以将备份内容打包并传输到远程主机,不在本机落盘。
- 数据一致性:通过复制InnoDB数据文件并执行崩溃恢复,确保备份数据的一致性和可用性。
- 恢复灵活:支持部分恢复和时间点恢复,提供灵活的恢复选项。
- 高性能:备份过程中对数据库性能影响最小,适用于高负载服务器环境。
- 资源限制:可以控制IO、线程、内存等资源限制,以满足不同场景的需求。
二、支持的存储引擎
Percona XtraBackup 8支持多种MySQL存储引擎,包括InnoDB、XtraDB、MyISAM、MyRocks等。其中,InnoDB和XtraDB支持非阻塞备份,而MyISAM等存储引擎在备份结束时需要短暂暂停写入操作。
三、版本兼容性
Percona XtraBackup 8.0版本主要适用于MySQL 8.0及相应版本的Percona Server。由于MySQL 8.0在数据字典和重做日志方面与之前版本不兼容,因此Percona XtraBackup 8.0无法支持MySQL 8.0之前的版本。
四、安装与配置
Percona XtraBackup 8可以通过YUM等包管理器进行安装,也可以从官方网站下载源码进行编译安装。在安装完成后,需要进行相应的配置,包括设置备份目录、配置参数等。此外,还需要创建备份用户并授予相应的权限,以确保备份操作的顺利进行。
五、备份与恢复操作
备份操作:
使用xtrabackup --backup命令执行备份操作。
指定备份目录和其他相关参数。
备份过程中,Percona XtraBackup会复制数据文件、事务日志等,并生成相应的备份文件。
恢复操作:
使用xtrabackup --copy-back或xtrabackup --move-back命令将备份数据恢复到目标目录。
在恢复过程中,Percona XtraBackup会应用重做日志中的所有更改,确保数据库的一致性。
恢复完成后,可以启动数据库并正常使用。
六、注意事项
- 备份路径权限:备份路径需要有可读写权限,以确保备份文件的正常创建和读取。
- 备份用户权限:备份用户需要授予相应的权限,包括BACKUP_ADMIN、PROCESS、RELOAD、LOCK TABLES等,以确保备份操作的顺利进行。
- 版本兼容性:在备份和恢复过程中,需要注意Percona XtraBackup与MySQL版本的兼容性,以避免出现不兼容的问题。
- 完整备份恢复:在恢复完整备份前,必须先停止mysql服务,并mv重命名当前数据库的数据目录;
版本限制
- XtraBackup 2.4:适用于 MySQL 5.6 和 5.7 及相应版本的 Percona Server 和 MariaDB。
- XtraBackup 8.0:适用于 MySQL 8.0 及相应版本的 Percona Server。
- XtraBackup 8.3:主要用于 MySQL 8.3及相应版本的 Percona Server。
综上所述,Percona XtraBackup 8是一款功能强大、性能优越的MySQL备份工具,适用于各种规模的数据库备份和恢复需求。
实操案例
1、Centos8上安装 Percona xtraBackup8
1、安装依耐包
首先要安装percona所需的mysql包,可用 下面的命令查询是否安装了,正常来说,这个包在装mysql的时候是会装上的
查询是否安装 (centos7系统目前不维护了,所以yum的配置地址可能会有点问题,解决方法查看 https://kdocs.cn/l/cvXUJRcCOJGl)
yum list | grep mysql-community-libs
若没有则执行安装命令
yum install -y mysql-community-libs-compat
2、安装xtraBackup8
step 1 下载rpm包
注意系统的版本
redhat/9
redhat/8
redhat/7
cd ~
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-31/binary/redhat/9/x86_64/percona-xtrabackup-80-8.0.35-31.1.el9.x86_64.rpm
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.32-26/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.32-26.1.el8.x86_64.rpm
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-31/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.35-31.1.el7.x86_64.rpm
step 2 安装rpm包
yum localinstall percona-xtrabackup-80-8.0.35-31.1.el9.x86_64.rpm
yum localinstall percona-xtrabackup-80-8.0.32-26.1.el8.x86_64.rpm
yum localinstall percona-xtrabackup-80-8.0.35-31.1.el7.x86_64.rpm
step 3 判断安装是否已安装成功
rpm -qa | grep -i xtrabackup
相关文件查询
rpm -ql percona-xtrabackup-80
查看xtrabackup安装版本
xtrabackup --version
2、备份前期准备工作
要开启MySQL的二进制日志
默认没有开启,实现备份需要开启它,
vi /etc/my.cnf
添加log_bin=mysqlbinlog,意思为启动二进制日志,文件名为mysqlbinlog;
再添加server-id=2,群集问题指定该主机序号,数字随意,最后重启mysqld即可。
【值得一提的是这里设置了MySQL8的二进制日志的文件名是mysqlbinlog,即:mysqlbinlog.index,如mysqlbinlog.000001,使用mysqlbinlog 可以查看二进制日志文件】
mysqlbinlog -v /var/lib/mysql/mysqlbinlog.000001

配置 expire_logs_days
修改配置文件
最常见的方式是编辑 MySQL 的配置文件(通常是 my.cnf 或 my.ini,取决于你的操作系统),并在 [mysqld] 段落中添加或修改 expire_logs_days 参数:
Ini深色版本
[mysqld]
# 设置二进制日志保留7天
expire_logs_days = 7
登录Mysql,输入show variables like 'log_bin';查看开启状态为on即可。
show variables like 'log_bin'

3、备份及恢复操作
完全备份还原流程
备份
xtraBackup8使用的是xtrabackup命令而非innobackupex,【其中 –target-dir=/data/xtrabackup/full 指明备份目的地】
备份命令(完整数据库),如果要备份压缩,再备份命令最后添加配置 --compress ,
使用qpress/QuickLZ压缩备份已被弃用,在未来的版本中可能会被删除。我们建议使用LZ4或Z标准(ZSTD)压缩算法。ZSTD压缩算法处于技术预览阶段。
xtrabackup --backup --target-dir=/data/xtrabackup/full -uroot -p'mysql-root用户的密码' --compress=lz4
xtrabackup --backup --target-dir=/data/xtrabackup/full -uroot -p'mysql-root用户的密码' --compress=lz4
查询备份结果
ls /data/xtrabackup/full/
查看二进制日志文件的位置
cat /data/xtrabackup/full/xtrabackup_binlog_info
还原
流程:
首先systemctl stop mysqld停止数据库
systemctl stop mysqld
如果要恢复的备份是压缩备份,要先执行解压,要解压缩使用LZ4或ZSTD压缩算法制作的备份,请为您的包管理系统安装相应的包。
yum install lz4
xtrabackup --decompress --target-dir=/data/xtrabackup/full-zip
还原时先一致性检查
xtrabackup --prepare --target-dir=/data/xtrabackup/full-zip
再进行恢复即可
xtrabackup --copy-back --target-dir=/data/xtrabackup/full-zip
然后还原的MySQL数据目录的文件要给mysql用户再授权
chown -R mysql.mysql /var/lib/mysql
最后正常启动mysqld,完成还原操作。
systemctl start mysqld
增量备份还原流程
备份
基于完全备份生成第一次增量备份
xtrabackup -uroot -p'mysqlroot用户密码' --backup --target-dir=/data/xtrabackup/inc1 --incremental-basedir=/data/xtrabackup/full
基于第一次增量备份生成第二次增量备份。(后续的增量备份以此类推。)
xtrabackup -uroot -p'mysql-root用户密码' --backup --target-dir=/data/xtrabackup/inc2 --incremental-basedir=/data/xtrabackup/inc1
还原
首先systemctl stop mysqld停止数据库
再进行一致性检查(先回滚全量包,再回滚第一次增量包,再回滚第二次增量包,这时增量数据都到了全量包中)【每次增量包都要回滚!】
xtrabackup --prepare --apply-log-only --target-dir=/data/xtrabackup/full
xtrabackup --prepare --apply-log-only --target-dir=/data/xtrabackup/full --incremental-dir=/data/xtrabackup/inc1
xtrabackup --prepare --apply-log-only --target-dir=/data/xtrabackup/full --incremental-dir=/data/xtrabackup/inc2
xtrabackup --prepare --target-dir=/data/xtrabackup/full
回滚完成后,进行恢复。
xtrabackup --copy-back --target-dir=/data/xtrabackup/full
最后还原的MySQL数据目录的文件要给mysql用户再授权,即可正常启动mysqld,完成还原操作。
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
差异备份还原流程
备份
基于完全备份生成第一次增量备份,与完全备份的差异就是差异备份。
xtrabackup -uroot -p'mysql-root用户密码' --backup --target-dir=/xtrabackup/inc1 --incremental-basedir=/xtrabackup/full
仍是基于完全备份生成第二次增量备份,与完全备份的差异就是差异备份。(后续的差异备份仍是基于完全备份进行,以此类推。)
xtrabackup -uroot -p'mysql-root用户密码' --backup --target-dir=/xtrabackup/inc2 --incremental-basedir=/xtrabackup/full
恢复
如上所示,进行了两次差异备份,那么回滚不用像增量备份一样,每个增量包都需要回滚,只需回归完全备份包和最后一次差异备份包即可。
准备全量备份
重新准备全量备份,确保使用 --apply-log-only 选项。
xtrabackup --prepare --apply-log-only --target-dir=/data/xtrabackup/full_20241124_000001
应用增量备份
再次尝试应用增量备份到全量备份上。
xtrabackup --prepare --apply-log-only --target-dir=/data/xtrabackup/full_20241124_000001 --incremental-dir=/data/xtrabackup/inc_20241129_000001
最终准备
完成所有增量备份的合并后,进行最终的准备步骤,这次不需要使用 --apply-log-only 选项。
xtrabackup --prepare --target-dir=/data/xtrabackup/full_20241124_000001
恢复数据
将准备好的数据恢复到目标服务器上的 MySQL 数据目录。
xtrabackup --copy-back --target-dir=/data/xtrabackup/full_20241124_000001
设置数据目录权限
chown -R mysql:mysql /var/lib/mysql
启动mysql服务
systemctl start mysqld
4、服务器MySQL定时备份
编写脚本
首先,创建一个名为 mysql_backup.sh 的脚本文件,并将其保存在 /usr/local/bin/ 目录下或其他可执行路径中;
要根据实际的服务器环境,修改其中的 BACKUP_DIR、MYSQL_USER、MYSQL_PASSWORD 配置的值。
#!/bin/bash
# 设置备份目录
BACKUP_DIR="/data/xtrabackup"
# 设置日期格式
DATE=$(date +%Y%m%d_%H%M%S)
# 设置 MySQL 用户和密码
MYSQL_USER="用户名"
MYSQL_PASSWORD="密码"
# 检查是否存在完整的备份
PREVIOUS_FULL_BACKUP_DIR=$(ls -td $BACKUP_DIR/full_* 2>/dev/null | head -1)
# 执行完整备份(每周日或无完整备份时)
if [ $(date +%u) -eq 7 ] || [ -z "$PREVIOUS_FULL_BACKUP_DIR" ]; then
echo "Executing full backup on $(date)"
FULL_BACKUP_DIR="$BACKUP_DIR/full_$DATE"
mkdir -p $FULL_BACKUP_DIR
xtrabackup --backup --target-dir=$FULL_BACKUP_DIR \
--user=$MYSQL_USER --password=$MYSQL_PASSWORD \
--compress=lz4
else
# 执行增量备份(其他天)
echo "Executing incremental backup on $(date)"
INCREMENTAL_BACKUP_DIR="$BACKUP_DIR/inc_$DATE"
mkdir -p $INCREMENTAL_BACKUP_DIR
xtrabackup --backup --target-dir=$INCREMENTAL_BACKUP_DIR \
--incremental --incremental-basedir=$PREVIOUS_FULL_BACKUP_DIR \
--user=$MYSQL_USER --password=$MYSQL_PASSWORD \
--compress=lz4
fi
# 清理超过两周的备份
echo "Cleaning up backups older than two weeks"
find $BACKUP_DIR -type d -mtime +14 -print0 | xargs -0 rm -rf
# 添加邮件通知逻辑(可选)
# mail -s "MySQL Backup Status" admin@example.com < /tmp/backup.log
配置 cron 任务
接下来,配置 cron 任务来调度这个脚本。打开 crontab 编辑器:
crontab -e
在编辑器中添加以下行:
# 每天 00:00 执行备份脚本
0 0 * * * /data/mysql_backup.sh > /data/log/mysql_backup.log 2>&1
保存并退出编辑器。现在,每周日 00:00 会执行完整备份,其他每天 00:00 会执行增量备份。
注意事项
- 权限:确保脚本具有执行权限:
chmod +x /data/mysql_backup.sh
- 备份目录:
确保备份目录存在并且脚本有足够的权限写入这些目录。
参考:xtrabackup 常用命令
xtrabackup 命令的一些常见参数及其说明:
-r, --backup:执行一次完整的备份操作。-P, --prepare:准备一个之前备份的文件,使其可以用于恢复。-t, --copy-back:将备份文件复制回原数据目录(需要在 prepare 阶段使用)。-u, --user:指定用来连接 MySQL 的用户名。-p, --password:指定 MySQL 用户的密码。-h, --host:指定 MySQL 服务器的主机名或 IP 地址。-P, --port:指定 MySQL 服务的端口号。-d, --datadir:MySQL 数据目录的位置。-S, --socket:指定 MySQL 服务使用的 socket 文件路径。-C, --compress:压缩备份数据。-e, --compress-threads:设置压缩线程数。-n, --no-timestamp:不给备份文件添加时间戳。-v, --verbose:详细模式,值越高输出的信息越多(例如:1, 2, ...)。-V, --version-check:检查 xtrabackup 版本与 MySQL 版本的兼容性。-L, --log-file:指定日志文件的位置。-T, --slave-info:记录当前 MySQL 实例是否作为从节点运行。-A, --auto-restart-on-failure:当检测到 innodb 数据文件不一致时自动重启 MySQL 服务。--innodb-flush-log-at-trx-commit:设置 InnoDB 日志刷新策略。--slave-threads:设置用于处理从属任务的线程数。
这只是部分参数,实际上 xtrabackup 提供了更多的选项来满足不同的备份需求。要查看所有可用的命令行选项,可以在命令行中输入 xtrabackup --help 获取帮助信息。
1万+

被折叠的 条评论
为什么被折叠?



