备份原理

自动备份

配置文件 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命令用于发送邮件,需确保系统已正确配置邮件发送工具

参考链接

  1. 【MySQL备份】mysqldump基础篇