在从 Windows 托管数据库集群创建的 Linux 上还原 pg_basebackup

Restore pg_basebackup on Linux which was created from a Windows hosted database cluster

目前我正在研究如何为 HA postgresql 架构设置流复制。但是这个问题对于我们 backup/restore 和一般混合环境中的维护也很重要。

我们的 "main" postgresql 服务器是 运行 在 Windows 盒子上。我正在使用 pg_dump 每天创建逻辑备份,并使用 pg_basebackup 和 WAL 归档创建一个应该提供 PITR 的完整备份(我还没有测试过)。

下一步是设置一个从属机器,它通过流复制保存一个副本。由于对postgresql生态系统的更好支持,本次新主机为运行 Ubuntu Server 16.04 LTS.

  1. 使用 pg_basebackup -h <main host> -D <datadirectory> --xlog-method=stream 我初始化了从数据目录。
  2. 然后我不得不修复表空间文件的一些符号链接,因为它们指向 Windows 路径而不是 Linux 文件系统。
  3. 接下来,我使用 standby_mode = on 和连接信息
  4. 创建了 recovery.conf 文件
  5. 我验证了服务器配置为 hot_standby = on 并启动了守护进程

现在我 运行 遇到了 postgres 告诉我的问题,"database locale (English_United_States.1252 which is obviously Windows specific) is incompatible with operating System"

嗯,我知道,1252 是 Windows 特定的语言环境,我应该在 Linux 上使用 en_US.UTF8,但是在这样的混合环境中,应该我:

您无法像 pg_basebackup 在不同架构上创建的那样恢复文件系统备份,例如在 Linux 上从 Windows 恢复备份。

这种场景也不可能有流式复制。

从 PostgreSQL v10 开始,您可以考虑逻辑复制。