当前位置: 首页 > news >正文

PostgreSQL 跑在 Docker 里怎么备份?恢复成功才算备份成功

PostgreSQL 跑在 Docker 里怎么备份?恢复成功才算备份成功

很多自托管应用背后都有 PostgreSQL:书签、财务、知识库、自动化平台。最危险的备份方式,是只把postgres_data目录压缩走,等换机器恢复时才发现版本、权限、WAL 状态都对不上。本文给一套适合个人服务器的 Docker PostgreSQL 备份恢复流程。

备份到底要备什么

最小可用备份包括:数据库逻辑导出、compose.yaml.env、应用上传目录。数据库导出负责恢复数据表,配置文件负责恢复连接信息,上传目录负责恢复附件。只备其中一个都不完整。

逻辑导出适合个人和小团队,因为它更容易跨机器、跨小版本恢复。体量很大的数据库才需要额外设计物理备份、WAL 归档和备机。

服务器规格建议

PostgreSQL 对内存和磁盘稳定性比较敏感。轻量应用可以 2 核 4G 起步,多个应用共用一套数据库建议 4 核 8G。备份时会产生压缩文件和临时 I/O,系统盘太小会让备份脚本自己把机器写满。

我会把 PostgreSQL 和两三个中小型自托管应用放在雨云服务器 rainyun-com的 2 核 4G 或 4 核 8G 机型上,重点关注磁盘和备份空间。注册填优惠码2026off领 5折,省下来的预算优先给快照和异地备份,而不是只看 CPU。

Compose 示例

下面只是通用示例,发布前要按具体应用官方文档确认数据库版本和环境变量:

services:postgres:image:postgres:16restart:unless-stoppedenvironment:POSTGRES_DB:appPOSTGRES_USER:appPOSTGRES_PASSWORD:change-this-passwordvolumes:-./postgres-data:/var/lib/postgresql/data

不要把数据库端口直接映射到公网。应用和数据库在同一个 Compose 网络里通信即可,除非你明确需要远程管理,并且已经做好防火墙和访问控制。

备份脚本怎么写

可以用pg_dump从容器里导出,再压缩保存:

#!/usr/bin/env bashset-euopipefailAPP_DIR=/opt/myappBACKUP_DIR=/opt/backups/myappSTAMP=$(date+%F-%H%M)mkdir-p"$BACKUP_DIR"cd"$APP_DIR"dockercomposeexec-Tpostgres pg_dump-Uapp-dapp\|gzip>"$BACKUP_DIR/postgres-$STAMP.sql.gz"tar-czf"$BACKUP_DIR/config-$STAMP.tar.gz"compose.yaml .env uploadsfind"$BACKUP_DIR"-typef-mtime+14-delete

如果数据敏感,备份文件要加密后再同步到异地,不要直接放公开网盘。至少每月做一次恢复演练,不然你只能证明“脚本会生成文件”,不能证明“数据能回来”。

恢复演练

恢复不要直接在生产机上练。开一台临时机器,复制备份文件,启动同版本 PostgreSQL,再导入:

gzip-dcpostgres-2026-06-10-0300.sql.gz\|dockercomposeexec-Tpostgres psql-Uapp-dapp

验证标准不是命令退出 0,而是应用能登录、列表能打开、附件能下载、关键数据数量大致对得上。演练完成后销毁临时机器,避免测试环境继续暴露。

常见问题

pg_dump报认证失败,多半是用户名、数据库名或环境变量和实际不一致。导入时报对象已存在,说明目标库不是空库。恢复后中文乱码,通常是客户端环境或导入方式有问题,优先保持 PostgreSQL 默认 UTF-8。

如果数据库很大,不要在业务高峰压缩备份。可以先降低压缩级别,或者把备份放到业务低谷执行。

总结

PostgreSQL 的备份不能只看有没有文件,要看能不能在另一台机器恢复。逻辑导出、配置备份、异地保存、恢复演练,四步缺一不可。

如果你想低成本做恢复演练,可以临时开一台雨云服务器 rainyun-com做测试机,注册填优惠码2026off领 5折。把恢复流程跑通后,再处理生产环境会踏实很多。

http://www.zskr.cn/news/1533623.html

相关文章:

  • QR分解:机器学习中被低估的数值稳定器
  • 【招聘】人才地图①:招聘的最高境界,不是找人,是“知道人在哪里“
  • 提升终端工作流:fzf-tab-completion与Git命令的完美结合
  • Python空列表的底层原理与工程实践指南
  • 2026年四川经营许可证代办机构服务能力观察:本土化深耕与全链条服务成行业趋势 - 优质品牌商家
  • 【招聘】人才地图④:五种Mapping方法——把散乱的信息,变成驱动决策的人才情报
  • Codex:面向非技术人的零代码AI工作流引擎
  • Gemini 3.1 Flash语音原生架构解析:突破400ms实时交互拐点
  • RHEL 9 上 ROS 2 Jazzy 二进制安装实战指南
  • Claude Opus 4.7 MAX:编程与视觉融合的工程化临界点
  • 【读书笔记】《OKR工作法》
  • Java 17 核心特性解析与生产环境迁移实战指南
  • Windows下零基础跑通llama.cpp:GGUF模型本地部署实操指南
  • 机电安装总承包公司
  • 2026年四川气泡膜与珍珠棉厂家怎么选?基于行业案例与多维测评的选购指南 - 优质品牌商家
  • 微信聊天记录永久保存指南:用WeChatMsg完整备份你的数字记忆
  • 如何利用auto-news的Embedding技术实现智能内容去重与高效排序:完整指南
  • 普通电脑跑大模型:llama.cpp+GGUF+Q4_K_M实战指南
  • AI PC存储瓶颈破解:为什么大模型加载慢在硬盘而非CPU
  • 2026年6月防锈的铁塔现货供应生产厂,钢管塔避雷针/杆塔避雷针/电力箱变钢平台/构架避雷针/钢管铁塔,铁塔加工厂家供应 - 品牌推荐师
  • 2026年四川防水材料采购指南:质量好的雨虹防水材料代理商如何选?行业深度分析 - 优质品牌商家
  • 编写程序统计家庭消杀用品,使用频次,种类,分析化学物质残留对人体影响。
  • Python pop() 方法详解:列表与字典的删除+返回原子操作
  • 如何快速掌握STM32与LCD 1602的I2C通信:嵌入式开发的实用指南
  • Browser/AI-First OS:操作系统范式迁移与开发者转型指南
  • LangChain向量数据库选型秘籍:避开生产环境大坑,Chroma、FAISS、Milvus怎么选?
  • 2026年消防培训中级设施操作员机构综合评测:谁更值得选择? - 优质品牌商家
  • 分账模式翻译:跨越商业与语言的精密计算
  • 潍坊市黄金回收白银回收铂金回收彩金回收店铺排行榜 2026实测五家诚信优选实体门店及电话地址推荐 - 大熊猫898989
  • SCD缓慢变化维度:数据工程师必须掌握的时空建模技能