Percona XtraBackup8.0备份实例
此示例演示了初级 DBA 如何使用 Percona XtraBackup 8.0 和 Percona Server for MySQL 8.0 数据库服务器为大型组织设置每日完整备份和每小时增量备份。
一、实验环境
- 您的系统上安装了 Percona XtraBackup 8.0。
- 您有一个正在运行的 Percona Server for MySQL 8.0 数据库服务器。
- 您已经创建了用于存储备份的专用目录:
二、每日完整备份脚本
以下脚本定义了服务器详细信息,如主机名、用户名、密码、数据目录和备份目录。将这些替换为您的实际值。
- 定义服务器凭据
date
使用命令为完整备份文件名生成时间戳xtrabackup
与标志一起使用--backup
以进行完整备份- 指定存储备份的目录
--target-dir
--datadir
指向 MySQL 数据文件的位置。- 提供凭据以
--user
访问--password
数据库服务器。 - 回显确认备份成功完成的消息。
#!/bin/bash# 设置服务器详细信息(替换为您的实际值)
SERVER_HOST="your_server_hostname"
SERVER_USER="your_db_username"
SERVER_PASSWORD="your_db_password"
DATA_DIR="/var/lib/mysql" # Replace with your data directory path
BACKUP_DIR="/backups/mysql/full"# 获取当前时间
TODAY=$(date +%Y-%m-%d)
FULL_BACKUP_FILENAME="${BACKUP_DIR}/${TODAY}"# 使用 full backup 命令运行 xtrabackup
xtrabackup --backup \--target-dir="${FULL_BACKUP_FILENAME}" \--datadir="${DATA_DIR}" \--user="${SERVER_USER}" \--password="${SERVER_PASSWORD}"echo "Daily full backup completed at $(date)"
- 运行每日脚本
您可以使用 cron 安排此脚本自动运行。例如,要每天午夜 (00:00) 运行它,请将以下行添加到您的 crontab:
0 0 * * * /path/to/daily_full_backup.sh
三、每小时增量备份脚本
此脚本使用与每日脚本相同的服务器详细信息。它检索增量备份文件名的当前日期和时间。核心命令使用xtrabackup
和--backup
标志--incremental
进行增量备份。--target-dir
指定存储增量备份的目录。指向使用和命令--base-dir
获得的最新完整备份目录。这可确保增量备份引用最新的完整备份。与每日脚本类似,它会回显确认消息。ls``tail
#!/bin/bash# Set server details (same as daily script)
SERVER_HOST="your_server_hostname"
SERVER_USER="your_db_username"
SERVER_PASSWORD="your_db_password"
DATA_DIR="/var/lib/mysql" # Replace with your data directory path
BACKUP_DIR="/backups/mysql/incr"# Get current date and hour for filename
TODAY=$(date +%Y-%m-%d)
HOUR=$(date +%H) # Get current hour (00-23)
INCR_BACKUP_FILENAME="${BACKUP_DIR}/${TODAY}_${HOUR}"# Set the base directory for incremental backups (point to the latest full backup)
BASE_DIR="/backups/mysql/full/$(ls -tr /backups/mysql/full | tail -n 1)"# Run xtrabackup with incremental backup command
xtrabackup --backup \--incremental \--target-dir="${INCR_BACKUP_FILENAME}" \--base-dir="${BASE_DIR}" \--user="${SERVER_USER}" \--password="${SERVER_PASSWORD}"echo "Hourly incremental backup completed at $(date)"
- 运行每小时脚本
使用 cron 安排此脚本每小时运行一次。
0 * * * * /path/to/your/script.sh