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

浙公网安备 33010602011771号