冷备份的核心是在数据库完全关闭、数据文件静止状态下进行物理复制。需确保数据库彻底停稳(如通过docker stop --time=30并验证日志)、备份宿主机上持久化路径(如volume挂载点或bind mount目录),而非容器可写层,并在备份后恢复服务与重启策略。
冷备份的核心是让数据库处于静止状态,确保数据文件不被修改,从而获得一致性的快照。docker 中的 docker stop 是实现这一目标的关键操作,但它本身只是停止容器,并不能直接完成备份——它只是冷备流程中保证一致性的必要前提。
冷备前必须确认数据库已完全静默
不是所有数据库容器在 docker stop 后都会立即停止写入。有些服务(如 PostgreSQL、MySQL)在收到 SIGTERM 后会尝试完成事务、刷盘、关闭连接,这个过程可能持续几秒到几十秒。若在数据库尚未真正停稳时就执行文件复制,可能导致备份损坏。
- 用
docker stop --time=30 mydb显式设置等待超时(单位秒),避免过早中断关闭流程 - 停止后检查日志:
docker logs mydb | tail -20,确认出现类似shutting down,database system is shut down,mysqld: Shutdown complete的终态提示 - 不要依赖
docker ps显示“Exited”就立刻备份——进程退出 ≠ 数据落盘完成
停止容器后,备份对象必须是卷或绑定挂载路径,而非容器内部
Docker 容器的可写层(container layer)随 docker stop 保留,但随 docker rm 永久删除。冷备绝不能基于 docker export 或 docker commit,因为这些操作捕获的是运行时状态,无法反映持久化数据的真实一致性。
正确做法是:
- 若使用 Docker Volume(推荐):查出卷位置
docker volume inspect mydb_data,找到Mountpoint路径(如/var/lib/docker/volumes/mydb_data/_data),直接对该目录做rsync或tar - 若使用 Bind Mount:备份宿主机上明确指定的挂载目录(如
/nas/postgres/data),该路径由docker run -v /nas/postgres/data:/var/lib/postgresql/data定义
配合 restart policy 实现“停—备—启”原子性,减少服务中断时间
为避免人为失误导致容器未重启,建议在停止前记录原始重启策略,并在备份完成后恢复:
- 查看原策略:
docker inspect mydb --format='{{.HostConfig.RestartPolicy.Name}}' - 备份完成后再
docker start mydb——此时会自动沿用原有策略(如unless-stopped) - 更稳妥的做法是:先
docker update --restart=no mydb,再docker stop mydb,备份完执行docker update --restart=unless-stopped mydb && docker start mydb
补充:单次冷备脚本逻辑示意(可集成进定时任务)
#!/bin/bash
CONTAINER="postgres_prod"
VOLUME_PATH="/nas/pgdata" # 对应 -v 参数中的宿主机路径
BACKUP_DIR="/backup/cold"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 1. 暂停重启策略,准备冷停
docker update --restart=no "$CONTAINER"
# 2. 发送停止信号,等待彻底关闭
docker stop --time=45 "$CONTAINER"
# 3. 确认进程已退出且无残留进程
if ! docker ps -a --format '{{.Names}}' | grep -q "^$CONTAINER$"; then
# 4. 执行同步备份(保留硬链接,支持增量差异)
rsync -a --delete "$VOLUME_PATH/" "$BACKUP_DIR/latest/"
cp -al "$BACKUP_DIR/latest" "$BACKUP_DIR/$TIMESTAMP"
fi
# 5. 恢复自动重启并启动
docker update --restart=unless-stopped "$CONTAINER"
docker start "$CONTAINER"
冷备不是“停了再拷贝”这么简单,关键是停得干净、备得准确、启得可靠。只要把容器生命周期、数据持久化路径、数据库关闭语义三者对齐,冷备就能成为最稳定的数据保护手段。











