#!/bin/bash
# 定义变量
BACKUP_DIR="/path/to/backup/folder"
MYSQL_CONTAINER="your_mysql_container_name"
MYSQL_USER="root"
MYSQL_PASSWORD="your_password"
DATABASE_NAME="your_database_name"
# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR
# 生成备份文件名
BACKUP_FILE="$BACKUP_DIR/backup_$(date +\%Y\%m\%d_\%H\%M\%S).sql.gz"
# 执行备份
docker exec $MYSQL_CONTAINER mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME | gzip > $BACKUP_FILE
# 删除超过30天的备份
find $BACKUP_DIR -name "backup_*.sql.gz" -type f -mtime +30 -delete
echo "Backup completed: $BACKUP_FILE"
将上述脚本保存为 /path/to/backup_script.sh
,并赋予执行权限:
chmod +x /path/to/backup_script.sh
crontab -e
添加以下内容(每天凌晨2点执行备份):
0 2 * * * /path/to/backup_script.sh
创建一个 Dockerfile
:
FROM mysql:latest
# 安装 cron
RUN apt-get update && apt-get install -y cron
# 创建备份脚本
RUN mkdir -p /backups
COPY backup_script.sh /backup_script.sh
RUN chmod +x /backup_script.sh
# 设置 cron 任务
RUN echo "0 2 * * * root /backup_script.sh" > /etc/cron.d/mysql-backup
RUN chmod 0644 /etc/cron.d/mysql-backup
# 启动 cron 服务
CMD ["sh", "-c", "cron && docker-entrypoint.sh mysqld"]
backup_script.sh
#!/bin/bash
# MySQL 备份脚本
BACKUP_DIR="/backups"
MYSQL_USER="root"
MYSQL_PASSWORD="$MYSQL_ROOT_PASSWORD"
DATABASE_NAME="$MYSQL_DATABASE"
mkdir -p $BACKUP_DIR
BACKUP_FILE="$BACKUP_DIR/backup_$(date +\%Y\%m\%d_\%H\%M\%S).sql.gz"
mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME | gzip > $BACKUP_FILE
# 删除超过30天的备份
find $BACKUP_DIR -name "backup_*.sql.gz" -type f -mtime +30 -delete
docker build -t mysql-with-backup .
docker run -d \
--name mysql-container \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-e MYSQL_DATABASE=yourdb \
-v /host/backups:/backups \
mysql-with-backup
schickling/mysql-backup-s3
镜像(支持备份到 S3)docker run -d \
--name mysql-backup \
--link your_mysql_container:mysql \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=yourpassword \
-e MYSQL_DATABASE=yourdb \
-e S3_ACCESS_KEY_ID=yourkey \
-e S3_SECRET_ACCESS_KEY=yoursecret \
-e S3_BUCKET=yourbucket \
-e S3_PREFIX=backup \
-e SCHEDULE='@daily' \
schickling/mysql-backup-s3
要恢复备份,可以使用以下命令:
gunzip < /path/to/backup_file.sql.gz | docker exec -i your_mysql_container mysql -uroot -pyourpassword yourdatabase
选择最适合您环境的方案,并根据实际需求调整参数。