标签: MySQL
Docker安装的Mysql数据库定时备份脚本
功能说明: 使用 docker exec 调用 mysqldump,生成 .sql 备份文件; 文件名中包含当前时间,保存在 mysql_backup/ 目录; 自动清理: 删除 超过 7 天的备份文件; 保留每月 1 号的备份文件,不管时间多久。 脚本 mysql_backup.sh #!/bin/bash # ========== 配置 ========== CONTAINER_NAME="mysql" MYSQL_USER="dbuser" MYSQL_PASSWORD="dbpassword" BACKUP_DIR="/home/ubuntu/mysql_backup" # ========== 创建备份目录 ========== mkdir -p "$BACKUP_DIR" # ========== 生成备份文件名 ========== DATE=$(date '+%Y-%m-%d_%H-%M-%S') BACKUP_FILE="${BACKUP_DIR}/backup_${DATE}.sql" # ========== 执行备份 ========== echo "开始备份:$BACKUP_FILE" docker exec "$CONTAINER_NAME" mysqldump -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" --all-databases > "$BACKUP_FILE" # ========== 清理逻辑 ========== echo "清理旧备份..." # 找出所有 .sql 文件 find "$BACKUP_DIR" -type f -name "*.sql" | while read file; do # 提取文件名中的日期 filename=$(basename "$file") date_str=$(echo "$filename" | grep -oP '\d{4}-\d{2}-\d{2}') # 如果提取不到日期,跳过 if [[ -z "$date_str" ]]; then continue fi # 获取今天日期和文件日期的时间戳 file_ts=$(date -d "$date_str" +%s) today_ts=$(date +%s) # 计算文件和今天的天数差 age_days=$(( (today_ts - file_ts) / 86400 )) # 如果超过 7 天且不是每月 1 号 if [[ $age_days -gt 7 ]]; then day_of_month=$(date -d "$date_str" +%d) if [[ "$day_of_month" != "01" ]]; then echo "删除过期备份:$file" rm -f "$file" fi fi done echo "备份完成。" 设置定时任务 设置每天 12:00 和 20:00 备份一次,并将日志写入文件。 ...