备份原理
自动备份
配置文件 mysql_backup.conf
配置文件路径和名称可以自定义
vim /etc/mysql_backup.conf
# 数据库配置
# 用户名
MYSQL_USER=your_username
# 密码
MYSQL_PASSWORD=your_pwd
# 端口号, 默认3306, 请以实际为准
MYSQL_HOST=3306
# 编码格式
MYSQL_CHARSET=utf8mb4+
# 备份路径, 可自定义
BACKUP_PATH=/backups/mysql
# 最多保留备份数量, 超过该数量, 逐级删除
MAX_BACKUPS=10
# 发送方邮件地址
EMAIL_FROM=send_user@xxx.com
# 接受方邮件地址
EMAIL_TO=receive_user@xxx.com
备份脚本 <font style="background-color:rgba(255, 255, 255, 0);">mysql_backup.sh</font>
vim /etc/mysql_backup.sh
#!/bin/bash
# 设置脚本名称、日期、日志等信息
NAME="MySQL Database Backup Script"
DATE=$(date +%Y-%m-%d-%H-%M)
LOG_FILE="/var/log/mysql_backup.log"
# 使用环境变量或配置文件读取敏感信息,提高安全性
source /etc/mysql_backup.conf 2 > /dev/null # 假设配置文件存放于此路径
# 若配置文件不存在,则设置默认值或提示错误
: ${MYSQL_USER:=mysql_user_not_set}
: ${MYSQL_PASSWORD:=mysql_passwd_not_set}
: ${MYSQL_HOST:=localhost}
: ${MYSQL_PORT:=3306}
: ${MYSQL_CHARSET:=utf8mb4}
: ${BACKUP_PATH:=/backups/mysql}
: ${MAX_BACKUPS:=10}
: ${EMAIL_TO:=you@example.com}
: ${EMAIL_FROM:=backup_script@example.com}
# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_PATH"
# 获取当前日期时间,用于备份文件命名
DATE_TIME=$(date +%Y%m%d_%H%M%S)
# 执行备份并压缩
mysqldump --opt --all-databases --single-transaction --flush-logs --master-data=2 \
-h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD \
| gzip > "$BACKUP_PATH/mysql_backup_$DATE_TIME.sql.gz"
if [ $? -eq 0 ]; then
echo "$(date) - 数据库备份成功" >> "$LOG_FILE"
# 删除超出保留数量的旧备份
find "$BACKUP_PATH" -name "*.sql.gz" -type f | sort | head -n -$MAX_BACKUPS | xargs -r rm -f
echo "$(date) - 已清理过期备份文件" >> "$LOG_FILE"
# 发送邮件通知(需要安装mail或msmtp等工具)
{
echo "主题: MySQL 数据库备份通知"
echo "From: $EMAIL_FROM"
echo "To: $EMAIL_TO"
echo ""
echo "数据库备份已完成,备份文件:mysql_backup_$DATE_TIME.sql.gz"
echo "备份路径:$BACKUP_PATH"
} | mail -s "$(echo -e "MySQL Backup on $DATE")" "$EMAIL_TO"
else
echo "$(date) - 数据库备份失败,请检查错误日志" >> "$LOG_FILE"
# 发送错误通知
{
echo "主题: MySQL 数据库备份失败通知"
echo "From: $EMAIL_FROM"
echo "To: $EMAIL_TO"
echo ""
echo "数据库备份失败,请立即检查。"
} | mail -s "$(echo -e "MySQL Backup Failure on $DATE")" "$EMAIL_TO"
fi
⚠️注意一定要将脚本文件设置未可执行, 否则任务不会执行
chmod +x /etc/mysql_backup.sh
说明:
- 环境变量: 使用环境变量读取敏感信息,可以提高脚本的灵活性和安全性。这里假设存在一个/etc/mysql_backup.conf配置文件来集中管理这些变量,以避免硬编码。
- 日志记录: 添加了日志文件,用于记录备份操作的详细信息,方便追踪和审计。
- 备份压缩: 使用gzip命令对备份文件进行压缩,减少存储空间占用。
- 自动清理: 使用find命令自动清理超过保留数量的旧备份文件,提高了脚本的自动化程度。
- 邮件通知: 添加了成功和失败的邮件通知功能,可以及时提醒管理员备份状态,mail命令用于发送邮件,需确保系统已正确配置邮件发送工具