使用Percona xtraBackup 8.x进行MySql8.0备份与还原

官方文档:Percona XtraBackup

Percona xtraBackup介绍

Percona XtraBackup 8是一款专为MySQL及其分支(如Percona Server和MariaDB)设计的开源备份工具。以下是对其的详细介绍:

一、主要特性

  1. 热备份:支持在不中断数据库操作的情况下执行热备份,确保数据的一致性和可恢复性。
  2. 全量与增量备份:提供全量备份和增量备份功能,减少存储空间和备份时间。
  3. 流式备份:支持流式备份,可以将备份内容打包并传输到远程主机,不在本机落盘。
  4. 数据一致性:通过复制InnoDB数据文件并执行崩溃恢复,确保备份数据的一致性和可用性。
  5. 恢复灵活:支持部分恢复和时间点恢复,提供灵活的恢复选项。
  6. 高性能:备份过程中对数据库性能影响最小,适用于高负载服务器环境。
  7. 资源限制:可以控制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-backxtrabackup --move-back命令将备份数据恢复到目标目录。

在恢复过程中,Percona XtraBackup会应用重做日志中的所有更改,确保数据库的一致性。

恢复完成后,可以启动数据库并正常使用。

六、注意事项

  1. 备份路径权限:备份路径需要有可读写权限,以确保备份文件的正常创建和读取。
  2. 备份用户权限:备份用户需要授予相应的权限,包括BACKUP_ADMIN、PROCESS、RELOAD、LOCK TABLES等,以确保备份操作的顺利进行。
  3. 版本兼容性:在备份和恢复过程中,需要注意Percona XtraBackup与MySQL版本的兼容性,以避免出现不兼容的问题。
  4. 完整备份恢复:在恢复完整备份前,必须先停止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.cnfmy.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 会执行增量备份。

注意事项

  1. 权限:确保脚本具有执行权限:
chmod +x /data/mysql_backup.sh
  1. 备份目录

确保备份目录存在并且脚本有足够的权限写入这些目录。

参考: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 获取帮助信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值