内容目录
Percona XtraBackup 是一个热备份工具,它在备份过程中不会锁定数据库,从而允许数据库在备份期间继续接受读写操作。这使得它成为一个非常有效的备份解决方案,尤其是在需要持续运行的生产环境中。
Xtrabackup 系列版本
目前 Xtrabackup 活跃的大版本有三个:
Xtrabackup 2.4 适用于 MySQL 5.6 和 MySQL 5.7。
Xtrabackup 8.0 适用于 MySQL 8.0。
Xtrabackup 8.1 适用于 MySQL 8.1。
注意,三个版本不能混用,因为 MySQL 8.0 版本 redo log 和数据字典格式都发生了变化,可能会出现不兼容的情况
官网下载:https://www.percona.com/downloads
安装
yum install -y perl-Digest-MD5 libaio libev perl-DBD-MySQL
wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.29/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.29-1.el7.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.29-1.el7.x86_64.rpm
详细说明
-
备份期间的锁定:
- XtraBackup 使用
InnoDB
存储引擎的MVCC
(多版本并发控制)来确保一致性备份。在备份过程中,XtraBackup 会拷贝数据文件,同时跟踪InnoDB
的日志文件以捕获任何写操作。 - 在备份开始时,XtraBackup 会短暂地锁定
InnoDB
表,以确保获取一致性快照。这种锁定是非常短暂的,通常在几毫秒到几秒之间,不会对数据库的正常操作造成明显影响。 - 对于
MyISAM
表,XtraBackup 会在备份过程中对这些表进行读锁定,因此如果你的数据库主要使用InnoDB
表,锁定时间会非常短。
- XtraBackup 使用
-
恢复期间的锁定:
- 在恢复数据时,XtraBackup 需要将数据库置于离线状态,因为恢复过程会覆盖现有的数据文件。这意味着在恢复期间,数据库将无法接受连接和操作。
增量备份脚本
以下脚本将进行全量和增量备份,使用 Percona XtraBackup,而不锁定数据库:
#!/bin/bash
# 配置备份参数
BACKUP_DIR="/path/to/backup"
FULL_BACKUP_DIR="$BACKUP_DIR/full"
INCREMENTAL_BACKUP_DIR="$BACKUP_DIR/incremental"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p $FULL_BACKUP_DIR
mkdir -p $INCREMENTAL_BACKUP_DIR
# 全备份文件路径
FULL_BACKUP_PATH="$FULL_BACKUP_DIR/full_backup"
# 增量备份文件路径
INCREMENTAL_BACKUP_PATH="$INCREMENTAL_BACKUP_DIR/incremental_backup_$DATE"
# 如果全备份不存在,创建全备份
if [ ! -d $FULL_BACKUP_PATH ]; then
xtrabackup --backup --target-dir=$FULL_BACKUP_PATH --user=your_username --password=your_password
if [ $? -ne 0 ]; then
echo "Full backup failed!"
exit 1
fi
fi
# 创建增量备份
xtrabackup --backup --target-dir=$INCREMENTAL_BACKUP_PATH --incremental-basedir=$FULL_BACKUP_PATH --user=your_username --password=your_password
if [ $? -ne 0 ]; then
echo "Incremental backup failed!"
exit 1
fi
# 更新全备份路径
FULL_BACKUP_PATH=$INCREMENTAL_BACKUP_PATH
# 清理旧的增量备份(保留最近 7 天的增量备份)
find $INCREMENTAL_BACKUP_DIR -type d -name "incremental_backup_*" -mtime +7 -exec rm -rf {} \;
设置定时任务
使用 crontab
来设置定时任务,使备份脚本自动执行。执行以下命令来编辑 crontab
文件:
crontab -e
在 crontab
文件中添加以下行,这样脚本会每天凌晨 2 点运行:
0 2 * * * /path/to/xtrabackup_incremental.sh >> /path/to/xtrabackup_incremental.log 2>&1
确保将 /path/to/xtrabackup_incremental.sh
和 /path/to/xtrabackup_incremental.log
替换为你的备份脚本路径和日志文件路径。
恢复过程
- 准备全量备份:
xtrabackup --prepare --apply-log-only --target-dir=/path/to/backup/full/full_backup
- 应用增量备份:
for dir in /path/to/backup/incremental/incremental_backup_*; do
xtrabackup --prepare --apply-log-only --target-dir=/path/to/backup/full/full_backup --incremental-dir=$dir
done
- 完成准备:
xtrabackup --prepare --target-dir=/path/to/backup/full/full_backup
- 恢复数据:
xtrabackup --copy-back --target-dir=/path/to/backup/full/full_backup
确保 /path/to/backup/full/full_backup
和 /path/to/backup/incremental/incremental_backup_*
替换为实际的备份路径。
通过使用 Percona XtraBackup,你可以在不锁定数据库的情况下进行热备份,从而保证数据库的高可用性和一致性。
近期评论