Pg_dump 远程 PostgreSQL 备份失败 - 端口与版本差异:有哪些可用选项?

当我尝试运行系统备份时,出现以下错误:“备份失败。请检查日志。”
日志显示:pg_dump: [archiver (db)] 连接到数据库 "discoursedb" 失败:无法连接到服务器:连接被拒绝

我认为可能存在两个问题:

  1. 远程服务器运行在非标准端口上。
  2. 远程 PostgreSQL 运行的是较新版本的 PSQL。

当我进入应用(/var/discourse/launcher enter app)并执行手动备份时,我注意到最初在没有指定端口的情况下,我得到了完全相同的错误:

$ pg_dump -h 123.456.789.101 -U username -W -F t discourse_db > discourse_db_backup.tar  
密码:  
pg_dump: [archiver (db)] 连接到数据库 "discourse_db" 失败:无法连接到服务器:连接被拒绝  
\t服务器是否在主机 "123.456.789.101" 上运行,并接受 TCP/IP 连接于端口 5432?  

这个问题很容易解决(除了我不知道如何强制 Discourse 在备份时使用正确的端口),但接下来的问题更令人担忧:我们在数据库服务器上使用了较新版本的 PSQL:

$ pg_dump -h 123.456.789.101 -p 45678 -U username -W -F t discourse_db > discourse_db_backup.tar  
密码:  
pg_dump: 服务器版本:11.5 (Ubuntu 11.5-3.pgdg18.04+1);pg_dump 版本:10.10 (Debian 10.10-1.pgdg100+1)  
pg_dump: 因服务器版本不匹配而中止  

在这种情况下可以采取什么措施?是否有可能使实际系统备份在这种情况下正常工作,还是必须分别备份 Discourse 和 PostgreSQL 数据库?

如果后者是唯一的选择,那么备份数据的正确方法是什么?是否有一种首选的协调机制可以同时完成这两项任务,而无需编写新的脚本来实现?

我在另一篇帖子中发现了一些关于类似情况的讨论。我的情况主要区别在于,我们将文件存储在本地服务器上,而不是 S3。我可以不备份 PostgreSQL,因为它是独立备份的,但我仍然需要备份:

  • 本地内容,以及
  • Discourse 设置

我仍然希望有一个包含数据库 + 内容 + 设置的统一备份,但我想您可能不支持或不会支持这种方案,因此我至少希望将内容和设置打包成一个统一的包。

Postgres 11 不受支持。您可以自行查找如何在不同版本之间进行恢复,但要让 Discourse 与 pg11 兼容,需要做一些额外工作。

有趣又奇怪。我曾在某处看到说 11 版本没问题,但除此之外,我已有系统部署到 11 版本,到目前为止尚未发现任何错误或问题(备份除外)……现在你让我担心了……

哦,来了,根据这篇帖子,PostgreSQL 11“应该能正常工作”。

是的。我还有两套系统部署在 PostgreSQL 11 上,运行正常,只是我目前直接进行备份。我在容器中已将 PostgreSQL 升级到 11 版本。它们可以执行备份,但无法恢复。

Discourse 备份系统在检测到 PostgreSQL 版本不匹配时,应仅发出警告而不应失败。我刚才尝试自己进行备份,由于我也在使用外部 PostgreSQL 服务器,结果根本没有创建任何 tarball 文件。

我也遇到了同样的问题。我将 PostgreSQL 数据库移到了单独的服务器,然后开始收到备份错误。我通过删除主服务器上的 PostgreSQL 并重新安装来找到解决方案。

cd /var/discourse
./launcher enter app
apt-get remove postgresql-client-common
apt-get update
sudo apt-get install postgresql

详情:Discourse yedekleme pg_dump hatası ve çözümü: pg_dump: error: server version: 12|13|14|15|*; pg_dump version: 12|13|14|15|* - Veritabanı Yönetim Sistemleri - Soru Cevap