整理说明:本文属于“2025-2026 技术笔记整理”系列,于 2026 年 8 月集中整理并公开发布。
WordPress 容器的数据持久化与可恢复备份
容器可以重建,但数据不能随可写层消失。WordPress 状态包括数据库中的文章、用户和配置,以及文件系统中的上传、主题、插件与运行配置。只备份一类无法恢复完整站点。
把数据放到容器之外
WordPress 站点目录通常是 /var/www/html,MariaDB 数据目录是 /var/lib/mysql。为它们挂载命名卷,容器替换后仍可挂载原数据:
services:
database:
volumes:
- database_data:/var/lib/mysql
wordpress:
volumes:
- wordpress_data:/var/www/html
volumes:
database_data:
wordpress_data:
命名卷由 Docker 管理。docker compose down 默认保留它们,docker compose down -v 则会删除项目命名卷。卷并非备份:磁盘损坏、误删和错误写入仍会影响数据。
分别导出数据库和站点文件
数据库应使用自身的逻辑导出工具备份,不能在运行中直接复制 /var/lib/mysql。以下命令从挂载的密码文件读取凭据,并把 SQL 输出到主机;备份目录应提前创建并限制权限:
docker compose exec -T database sh -c \
'mariadb-dump --single-transaction --quick \
-u"$MARIADB_USER" -p"$(cat "$MARIADB_PASSWORD_FILE")" \
"$MARIADB_DATABASE"' > backup/wordpress.sql
docker compose exec -T wordpress \
tar -C /var/www/html -czf - . \
> backup/wordpress-files.tar.gz
-T 关闭伪终端,避免混入控制内容。--single-transaction 为事务表提供一致性快照;存在非事务表或结构变更时应安排维护窗口。文件与数据库应同期备份,减少附件不匹配。
备份完成不等于可以恢复
- 为文件名加入时间标识,记录对应的 Compose 配置、镜像标签和恢复说明。
- 将备份复制到另一台主机或对象存储,不要只放在原服务器磁盘。
- 对归档和 SQL 计算校验值,备份任务失败时应产生告警。
- 密码和密钥应单独加密保管,避免明文秘密混进普通归档。
恢复时先阻止写入,在干净卷还原文件并导入数据库,再核对域名、媒体、登录和插件。演练应在隔离环境执行;只有完成关键操作,才能证明备份有效。生产站点还应明确恢复时间和可接受的数据丢失范围。