需求说明:
mysql数据库ip地址为192.168.1.100,端口3306,root密码111111,
服务器cantos7中ip地址192.168.1.101
利用xtrabackup每周六进行全量备份,每天进行增量备份,保留2个礼拜的备份,并且保存到192.168.1.101的/data分区
为了在CentOS 7服务器上使用XtraBackup执行MySQL数据库的备份,您需要完成以下步骤:
步骤 1:在CentOS 7服务器(192.168.1.101)上安装Percona XtraBackup
-
首先,添加Percona软件包仓库:
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
-
安装Percona XtraBackup:
sudo yum install percona-xtrabackup-24
步骤 2:创建备份脚本
-
创建一个脚本目录:
sudo mkdir -p /opt/backup_scripts
-
创建全量备份脚本
/opt/backup_scripts/full_backup.sh
,并粘贴以下内容:#!/bin/bash TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") BACKUP_DIR="/data/backups/full/$TIMESTAMP" USER="root" PASSWORD="111111" HOST="192.168.1.100" PORT="3306" mkdir -p $BACKUP_DIR xtrabackup --backup --user=$USER --password=$PASSWORD --host=$HOST --port=$PORT --target-dir=$BACKUP_DIR xtrabackup --prepare --target-dir=$BACKUP_DIR find /data/backups/full -type d -ctime +14 -exec rm -rf {} \;
-
创建增量备份脚本
/opt/backup_scripts/incremental_backup.sh
,并粘贴以下内容:#!/bin/bash TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") FULL_DIR=$(ls -td /data/backups/full/*/ | head -1) INCR_DIR="/data/backups/incremental/$TIMESTAMP" USER="root" PASSWORD="111111" HOST="192.168.1.100" PORT="3306" mkdir -p $INCR_DIR xtrabackup --backup --incremental-basedir=$FULL_DIR --user=$USER --password=$PASSWORD --host=$HOST --port=$PORT --target-dir=$INCR_DIR xtrabackup --prepare --apply-log-only --target-dir=$FULL_DIR xtrabackup --prepare --apply-log-only --incremental-dir=$INCR_DIR --target-dir=$FULL_DIR find /data/backups/incremental -type d -ctime +14 -exec rm -rf {} \;
-
使这两个脚本可执行:
sudo chmod +x /opt/backup_scripts/full_backup.sh sudo chmod +x /opt/backup_scripts/incremental_backup.sh
步骤 3:配置定时任务
-
打开cron表:
crontab -e
-
添加以下条目以安排每周六进行全量备份,每天进行增量备份(您可以根据需要修改具体时间):
#每周六凌晨1点进行全量备份 0 1 * * 6 /opt/backup_scripts/full_backup.sh > /var/log/full_backup.log 2>&1 #每天凌晨2点进行增量备份 0 2 * * * /opt/backup_scripts/incremental_backup.sh > /var/log/incremental_backup.log 2>&1
-
保存并退出编辑器。
这样一来,您的 CentOS 7 服务器上就配置好了 XtraBackup,并且已经安排了定期的全量和增量备份。请确保检查/data/backups
目录中的备份文件,以确保备份任务正常运行。如果需要,您可以根据实际需求调整定时任务的时间。
步骤 4:定期清理日志
您可以创建一个日志轮换脚本,用于定期清理和压缩日志文件。以下是一个简单的日志轮换脚本 /opt/backup_scripts/rotate_logs.sh
:
#!/bin/bash
LOG_DIR="/var/log"
FULL_LOG="full_backup.log"
INCR_LOG="incremental_backup.log"
MAX_AGE=10
# Rotate full_backup.log
if [ -e "$LOG_DIR/$FULL_LOG" ]; then
mv "$LOG_DIR/$FULL_LOG" "$LOG_DIR/$FULL_LOG.$(date +%Y%m%d)"
gzip -9 "$LOG_DIR/$FULL_LOG.$(date +%Y%m%d)"
fi
# Rotate incremental_backup.log
if [ -e "$LOG_DIR/$INCR_LOG" ]; then
mv "$LOG_DIR/$INCR_LOG" "$LOG_DIR/$INCR_LOG.$(date +%Y%m%d)"
gzip -9 "$LOG_DIR/$INCR_LOG.$(date +%Y%m%d)"
fi
# Remove logs older than MAX_AGE days
find "$LOG_DIR" -type f -name "$FULL_LOG.*.gz" -mtime +$MAX_AGE -exec rm -f {} \;
find "$LOG_DIR" -type f -name "$INCR_LOG.*.gz" -mtime +$MAX_AGE -exec rm -f {} \;
-
设置脚本可执行权限:
sudo chmod +x /opt/backup_scripts/rotate_logs.sh
-
添加定时任务,每天凌晨3点执行日志轮换:
crontab -e
添加以下条目:
# 每天凌晨5点执行日志轮换 0 5 * * * /opt/backup_scripts/rotate_logs.sh
这个脚本将每天早上5点运行,它将分别备份并压缩 full_backup.log
和 incremental_backup.log
文件。同时,它还将删除超过 MAX_AGE
(默认为10天)的日志文件。您可以根据需要调整这个值。
日志说明:
XtraBackup 在日志中显示已成功执行并备份数据库。在日志中,它显示了一系列的操作,包括 InnoDB 的恢复过程,创建和重写 redo log 文件以及其他一些初始化操作。最后,XtraBackup 完成了备份过程,并显示 “completed OK!”,表明备份已成功完成。
请注意,定期备份数据库是非常重要的,以确保数据的安全性和完整性。使用 XtraBackup 可以帮助您实现这一目标。记得要定期检查日志文件,以确保备份过程始终正常运行。
备份完以后可以用du -lh --max-depth=1
查看备份文件大小
该如何恢复:
使用Percona XtraBackup恢复MySQL数据库时,需要遵循以下步骤:
步骤 1:停止MySQL服务
在恢复数据库之前,需要停止正在运行的MySQL服务。在CentOS 7服务器上执行以下命令:
sudo systemctl stop mysqld
步骤 2:恢复全量备份
-
首先,导航到最新全量备份的目录:
cd /data/backups/full/<latest_full_backup_directory>
请将
<latest_full_backup_directory>
替换为最新全量备份的目录名。 -
使用
xtrabackup
恢复全量备份:sudo xtrabackup --copy-back --target-dir=<latest_full_backup_directory> --datadir=/var/lib/mysql
请将
<latest_full_backup_directory>
替换为最新全量备份的目录名。
步骤 3:恢复增量备份(如有)
如果有增量备份,需要按照创建顺序依次恢复它们:
-
导航到第一个增量备份的目录:
cd /data/backups/incremental/<first_incremental_backup_directory>
请将
<first_incremental_backup_directory>
替换为第一个增量备份的目录名。 -
使用
xtrabackup
恢复增量备份:sudo xtrabackup --copy-back --target-dir=<first_incremental_backup_directory> --datadir=/var/lib/mysql
请将
<first_incremental_backup_directory>
替换为第一个增量备份的目录名。 -
对于其他增量备份,重复上述步骤。
步骤 4:设置正确的权限
为确保MySQL服务能够正常访问数据文件,请将数据目录的所有权更改为mysql:mysql
:
sudo chown -R mysql:mysql /var/lib/mysql
步骤 5:重新启动MySQL服务
最后,重新启动MySQL服务:
sudo systemctl start mysqld
现在,您已经使用Percona XtraBackup成功地恢复了MySQL数据库。请确保检查数据库中的数据,以验证恢复过程是否成功。
验证备份是否成功
要验证MySQL数据库的备份是否成功,可以采取以下措施:
-
检查日志文件:检查在
/var/log/full_backup.log
和/var/log/incremental_backup.log
中的日志文件。查看日志中是否有错误信息,确保备份过程已成功完成。通常,成功的备份会在日志末尾显示“completed OK!”。 -
查看备份文件:在
/data/backups/full
和/data/backups/incremental
目录下检查备份文件。检查这些目录下是否有最近的备份,以及是否有期望的备份文件。 -
检查备份文件大小:使用
du -sh /data/backups/full
和du -sh /data/backups/incremental
命令查看全量和增量备份的总大小。确保备份大小与预期相符,并与原始数据库数据的大小相近。 -
恢复测试:在一个测试环境中尝试恢复备份。这将帮助您检查备份的完整性,并确保在需要时能够成功恢复数据库。
通过以上措施,可以有信心地确认MySQL数据库备份是否成功。定期进行这些检查以确保备份始终有效且可用。