docker 环境备份 mysql 数据库

sudo touch /homemysql_backup.sh
sudo chmod +x /homemysql_backup.sh

#!/bin/bash

# ==================== 配置区 ====================
CONTAINER_NAME="mysql_container"  # 你的MySQL容器名
MYSQL_USER="root"                 # MySQL用户名
MYSQL_PASSWORD="your_password"    # MySQL密码
DATABASE_NAME="--all-databases"   # 要备份的库,写 --all-databases 备份全部,或写具体库名如 my_db
BACKUP_DIR="/data/backup/mysql"   # 宿主机备份目录
RETENTION_DAYS=7                  # 保留最近几天的备份
# ==============================================

# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR

# 生成带时间戳的文件名,例如 backup_2026-08-20_03-00-01.sql.gz
DATE_SUFFIX=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_FILE="$BACKUP_DIR/backup_${DATE_SUFFIX}.sql.gz"

# 执行备份(通过 docker exec 在容器内运行 mysqldump,并直接压缩)
echo "开始备份: $(date)"
docker exec $CONTAINER_NAME mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME --single-transaction --routines --triggers | gzip > $BACKUP_FILE

# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "备份成功: $BACKUP_FILE"
else
    echo "备份失败!请检查日志。"
    exit 1
fi

# 删除超过保留天数的旧备份文件
find $BACKUP_DIR -name "*.sql.gz" -type f -mtime +$RETENTION_DAYS -delete
echo "已清理超过 ${RETENTION_DAYS} 天的旧备份文件"

echo "备份任务完成"

crontab -e

0 2 * * * /home/mysql_backup.sh >> /home/mysql_backup.log 2>&1

systemctl status cron # Debian/Ubuntu
grep CRON /var/log/syslog # Debian/Ubuntu

posted @ 2026-08-20 11:26  LiuChengloong  阅读(6)  评论(0)    收藏  举报