本教程将引导你完成安装 Percona XtraBackup 并使用 cron 作业自动化 MySQL 8 备份的过程。
Percona XtraBackup 是一个开源工具,为基于 MySQL 的服务器提供热备份,使你的数据库在计划的维护窗口期间保持完全可用。它对于对 MySQL 8 数据库进行一致的备份非常有效,尤其是在生产环境中。
Percona XtraBackup (PXB) 是一个 100% 开源的备份解决方案,为希望从全面、响应迅速且成本灵活的 MySQL 数据库支持中获益的组织提供商业支持。
第一步:安装 Percona XtraBackup
添加 Percona 存储库:
sudo apt-get install wget gnupg2 -y
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
要启用 Percona Distribution for MySQL 8.0 存储库,请使用:
percona-release setup pdps8.0
安装 Percona XtraBackup:
sudo apt-get install percona-xtrabackup-80 -y
验证安装:
通过检查版本来确保 Percona XtraBackup 已正确安装:
xtrabackup --version
输出:
xtrabackup version 8.0.35-31 based on MySQL server 8.0.35 Linux (x86_64) (revision id: 55ec21d7)
第二步:创建备份目录
创建一个目录来存储你的备份:
sudo mkdir -p /var/backups/mysql
sudo chown -R mysql:mysql /var/backups/mysql
第三步:在 MySQL 中创建备份用户
出于安全原因,建议创建一个专门用于备份的 MySQL 用户,而不是使用 root 用户。
以 Root 用户身份登录 MySQL:
sudo mysql -u root -p
创建备份用户:
将 backup_user
替换为你想要的用户名,并将 strong_password
替换为强且唯一的密码。
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'strong_password';
授予必要的权限:
备份用户需要特定的权限才能执行备份。使用以下命令授予这些权限:
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT, SHOW DATABASES, SHOW VIEW, EVENT, TRIGGER, SELECT, BACKUP_ADMIN ON *.* TO 'backup_user'@'localhost';
应用更改:
FLUSH PRIVILEGES;
退出 MySQL:
EXIT;
第四步:执行完整备份
在自动化之前,测试手动备份以确保一切设置正确。
xtrabackup --backup --target-dir=/var/backups/mysql/full --user=<mysql_user> --password=<mysql_password>
将 <mysql_user>
和 <mysql_password>
替换为你的 MySQL 凭据。
第五步:使用 Cron 自动化备份
要自动化备份过程,你可以使用 cron 作业。以下步骤将安排每日完整备份。
创建一个脚本来处理备份过程:
sudo nano /usr/local/bin/mysql_backup.sh
将以下内容添加到脚本中:
#!/bin/bash
BACKUP_DIR="/var/backups/mysql/full/$(date +%F)"
MYSQL_USER="<mysql_user>"
MYSQL_PASSWORD="<mysql_password>"
# Create backup directory
mkdir -p $BACKUP_DIR
# Run backup
xtrabackup --backup --target-dir=$BACKUP_DIR --user=$MYSQL_USER --password=$MYSQL_PASSWORD
# Compress the backup
tar -czf $BACKUP_DIR.tar.gz -C $BACKUP_DIR .
# Remove uncompressed files
rm -rf $BACKUP_DIR
# Optional: Remove old backups (older than 7 days)
find /var/backups/mysql/ -type f -name "*.tar.gz" -mtime +7 -exec rm {
} \\;
将 <mysql_user>
和 <mysql_password>
替换为你的 MySQL 凭据。
保存并关闭文件。
使脚本可执行:
sudo chmod +x /usr/local/bin/mysql_backup.sh
安排 Cron 作业。打开 cron tab:
sudo crontab -e
添加以下行以安排每天凌晨 2 点进行备份:
0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1
这将把任何输出或错误重定向到 /var/log/mysql_backup.log
。
第六步:验证自动化
在计划的时间之后,检查备份目录和日志,以确保备份过程正常工作:
ls /var/backups/mysql/
你应该看到带有日期戳文件名的压缩备份文件。
结论
我们已经成功地看到了如何使用 Percona XtraBackup 和 cron 作业来自动化 MySQL 8 备份。此设置可确保定期执行数据库备份而无需人工干预,从而在发生任何故障时保持数据的安全性和可恢复性。