我在 Windows 2003 SP2 上运行 PostgreSQL 9。我正尝试在同样运行 PostgreSQL 9 的 Fedora 12 系统上复制它。
我遇到了这个错误信息:
/usr/pgsql-9.0/bin/postgres -D /var/lib/pgsql/9.0/data/ -p 5432
2011-02-11 17:43:26 ISTFATAL: incorrect checksum in control file
由于防火墙的限制,我无法遵循官方说明一丝不苟。相反,我在服务器离线时压缩了数据目录的内容,并将其复制到 Linux 机器上。我在两个目录上运行了 sha1deep,没有不匹配的情况。我更改了权限,以便只有用户postgres
和组才能访问文件。
现在,我该怎么做才能使复制正常工作?我尝试使用“pg_dumpall”,但系统抱怨数据库 ID 不匹配。
答案1
要使用流式复制,您必须在相同的操作系统上使用相同的 PostgreSQL 版本。Windows 和 Fedora 是不同的操作系统,因此不适用于流式复制。
如果你想要在不同版本和/或不同操作系统之间进行复制,你可以看看斯洛尼。
答案2
使用 Postgresql 9.5.21 作为主服务器Windows 2012 R2
和从服务器完成了此操作Ubuntu 14.04
。
你必须注意以下几点:
- 最相似的 CPU(页面大小、架构、寄存器)。因此,您不能混合使用 64/32 位,或使用具有不同字节序或页面大小的 CPU;
- 操作系统也具有相同的字节顺序:32 位或 64 位;
- PG 的主版本相同:9.5.x 与相同或其他 9.5.x 版本(用于流复制,我正在使用,逻辑复制适用于不同版本的 PG);
因此,我在 Windows Server 上找到了已安装的 PG。编辑postgresql.conf
以启用副本和 PITR,并pg_hba.conf
允许连接。
然后转到 Ubuntu,在 PG 停止后,我从主服务器获取了以下内容:
pg_basebackup -D /tmp/db/ -X stream -R -U postgres -h ip-master
然后修改配置并将数据目录替换为/tmp/db
。
启动从属,并且启动并运行,但是看看这个:
2020-03-18 21:05:31.598 CET [44640] 日志:数据库系统已准备好接受只读连接
2020-03-18 21:05:31.631 CET [44645] 日志:开始在时间线 1 上的 36/C2000000 处从主节点流式传输 WAL
2020-03-18 21:05:31.905 CET [44646] [未知]@[未知] LOG:启动包不完整
2020-03-18 21:05:32.416 CET [44649] postgres@postgres FATAL:数据库区域设置与操作系统不兼容
2020-03-18 21:05:32.416 CET [44649] postgres@postgres DETAIL:数据库使用 LC_COLLATE“Italian_Italy.1252”初始化,setlocale() 无法识别。
2020-03-18 21:05:32.416 CET [44649] postgres@postgres 提示:使用其他语言环境重新创建数据库或安装缺少的语言环境。
有趣的是:复制有效,但您无法连接到数据库。
无论如何,如果你在 Windows 上原始复制数据目录,它就会非常有效。
当然,如果你用UTF-8重新创建集群,就完全没有问题了。
注意:非常感谢incognito
官方ilmari
IRC PG 频道提供的提示。