本文最后更新于53 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
新手教程:在宝塔面板用 Docker 自动备份 MySQL 全库
本教程面向新手小白,详细教你如何在宝塔面板环境下,为 Docker MySQL 容器设置每日自动备份。每一步都有操作命令和注意事项,按步骤执行即可。
步骤 0:准备工作
- 确保服务器已经安装 Docker 并有运行中的 MySQL 容器。
- 可以通过 SSH 登录服务器,推荐用
root用户。 - 确认宝塔面板已安装并能使用“计划任务”。
步骤 1:确认 Docker 容器名称
在服务器 SSH 终端执行以下命令查看所有容器:
docker ps --format "table {{.Names}}\t{{.Status}}"
输出类似:
NAMES STATUS mysql_hmdd-mysql_hMdd-1 Up 5 days wordpress_abc-wordpress_abc-1 Up 5 days
注意:复制完整容器名(区分大小写),例如 mysql_hmdd-mysql_hMdd-1。
步骤 2:创建备份目录
在服务器上创建一个目录存放备份文件:
mkdir -p /www/backup/database
如果目录已经存在可跳过。
步骤 3:创建备份脚本
在服务器上创建脚本文件:
nano /www/backup/database/mysql_backup.sh
将以下内容完整粘贴进去:
#!/bin/sh
BACKUP_DIR="/www/backup/database"
CONTAINER_NAME="mysql_hmdd-mysql_hMdd-1"
DOCKER_BIN="/usr/bin/docker"
DB_PASSWORD="AjMB68eShLttXNBL"
mkdir -p "$BACKUP_DIR"
DATE=$(date +%Y%m%d_%H%M%S)
FILE_NAME="docker_full_backup_$DATE.sql.gz"
ERROR_LOG="$BACKUP_DIR/mysqldump_error.log"
echo "------------------------------------------------"
echo "开始执行 MySQL Docker 全库备份:$(date)"
$DOCKER_BIN exec "$CONTAINER_NAME" mysqldump -u root -p"$DB_PASSWORD" --protocol=socket --single-transaction --quick --all-databases > "$BACKUP_DIR/tmp.sql" 2> "$ERROR_LOG"
if [ $? -ne 0 ]; then
echo "❌ 备份失败:"
cat "$ERROR_LOG"
rm -f "$BACKUP_DIR/tmp.sql"
exit 1
fi
gzip -f "$BACKUP_DIR/tmp.sql"
mv "$BACKUP_DIR/tmp.sql.gz" "$BACKUP_DIR/$FILE_NAME"
if [ ! -s "$BACKUP_DIR/$FILE_NAME" ]; then
echo "❌ 备份失败:生成文件为空"
exit 1
fi
SIZE=$(du -h "$BACKUP_DIR/$FILE_NAME" | cut -f1)
echo "✅ 备份成功:$SIZE"
echo "文件路径:$BACKUP_DIR/$FILE_NAME"
find "$BACKUP_DIR" -mtime +7 -name "docker_full_backup_*.sql.gz" -delete
echo "🧹 已清理 7 天前旧备份"
echo "------------------------------------------------"
保存并退出:Ctrl+O → 回车 → Ctrl+X
步骤 4:给予脚本执行权限
chmod +x /www/backup/database/mysql_backup.sh
步骤 5:测试脚本是否可执行
/bin/sh /www/backup/database/mysql_backup.sh
正常运行会看到类似输出:
------------------------------------------------ 开始执行 MySQL Docker 全库备份:2026-02-05 17:55:34 ✅ 备份成功:1.3M 文件路径:/www/backup/database/docker_full_backup_20260205_175534.sql.gz 🧹 已清理 7 天前旧备份 ------------------------------------------------
步骤 6:在宝塔面板设置计划任务
- 登录宝塔 → 计划任务 → 添加任务
- 类型选择:Shell 脚本
- 命令填写:
/bin/sh /www/backup/database/mysql_backup.sh - 执行周期:每日凌晨或业务低峰期
- 保存任务
步骤 7:优化建议
- 隐藏数据库密码:在
/root/.my.cnf配置登录凭证,脚本中不再明文出现密码。 - 完整备份:结合网站文件目录打包,实现数据库 + 文件的整机自动备份。
总结
按照本教程,小白也能轻松完成 Docker MySQL 自动全库备份,并通过宝塔计划任务每天执行。备份文件自动压缩、保留 7 天历史、清理旧文件,真正实现一键灾备。