0

到目前为止,我已经成功地在单台计算机上完成了 Postrong 的 Slony 复制(主从服务器都驻留在同一台计算机上,即本地主机)。

我在 Ubuntu 12.04、Suse Enterprise server 11 和 Windows 中做过。我遵循了此链接中的示例步骤。http://www.linuxjournal.com/article/7834?page=0,0这个_

我什至能够在两个不同的 Windows 计算机主 IP 之间执行此步骤:192.168.0.3 从属 IP 192.168.0.8)

但是当我在运行slonik C:\Slony\mtscript.txt时尝试 Windows 和 Suse 之间的 Slony 复制( Master: Windows(192.168.0.3)Slave:Suse(192.168.0.9) ) ,我得到了这个错误

C:\Slony\mtscript.txt:8: PGRES_FATAL_ERROR 加载 '$libdir/slony1_funcs.2.2.0'; - 错误:无法访问文件“$libdir/slony1_funcs.2.2.0”:没有这样的文件或目录

C:\Slony\mtscript.txt:8: 错误:无法在数据库'dbname=repdb_slave host=192.168.0.9 port=5432 user=postgres password=root'中加载 Slony-I C 函数的扩展

当我用谷歌搜索这个错误时,我发现了很多,我只是通过破坏命令 ./pg_config 我才知道,

(1)windows slony1_funcs.2.2.0.dllLIBDIR = C:/PROGRA~2/POSTGR~1/9.3/lib (即C:\Program Files (x86)\PostgreSQL\9.3\lib)

(2)并且在 Suse中slony1_funcs.2.2.0.soPKGLIBDIR = /opt/PostgreSQL/9.3/lib/postgresql

编辑 :

我的脚本文件:mtscript.txt

cluster name = repdb_cluster_suse;
node 1 admin conninfo = 'dbname=repdb host=192.168.0.3 port=5432 user=postgres password=root';
node 2 admin conninfo = 'dbname=repdb_slave host=192.168.0.9 port=5432 user=postgres password=root';
init cluster (id = 1, comment = 'Node 1');
create set (id = 1, origin = 1,comment = 'contact table');
set add table (set id = 1, origin = 1, id = 1,full qualified name = 'public.contact',comment = 'Table contact');
set add sequence (set id = 1, origin = 1, id = 2,full qualified name = 'public.contact_seq',comment = 'Sequence contact_seq');
store node (id = 2, comment = 'Node 2',event node=1);
store path (server = 1, client = 2,conninfo = 'dbname=repdb host=192.168.0.3 port=5432 user=postgres password=root');
store path (server = 2, client = 1,  conninfo = 'dbname=repdb_slave host=192.168.0.9 port=5432 user=postgres password=root');
store listen (origin = 1, provider = 1, receiver = 2);
store listen (origin = 2, provider = 2, receiver = 1);

我已经安装了相同版本的 Postgres(版本 9.3.5.1)和 slony(2.2.0-1)。(都从这里下载32 位版本)

Windows Postgres 安装目录是 C:\Program Files (x86)\PostgreSQL\9.3

suse Postgres 安装目录是 /opt/PostgreSQL/9.3/bin

那么如何解决这个错误呢?如何在 windows 和 linux(suse) 之间执行 Slony 复制?

任何帮助将不胜感激。

提前致谢

4

2 回答 2

1

好的 - 您的设置脚本没有明显的问题,我们知道它适用于 Windows<=>Windows 和 Linux<=>Linux。

在您的 Windows 机器上,您可以尝试以下操作:

C:> psql -h 192.168.0.9 -U postgres -d repdb_slave
postgres# load 'foo';
postgres# load 'slony1_funcs.2.2.0';

第一个应该给出错误,第二个应该工作。如果没有,请再次检查 pg_config 设置和文件位置和权限。

另外 - 检查 PostgreSQL 服务器日志。如果您没有看到那里记录的第一个错误,请确保您使用数据库和用户名记录错误,然后重试。然后你可以再次尝试 slony 并检查它是否在做我们认为的那样。

如果第二个“加载”确实有效,那么它可能是 slony 本身的错误(与行尾或类似的事情有关)。他们在http://slony.info上提到了邮件列表,我会在那里解决这个问题,并给出这个问题的链接。

肯定有很多人做过跨平台复制,所以我觉得奇怪的是 Slony 中会有如此明显的错误。我看不出我们缺少什么。

于 2014-10-17T08:06:35.430 回答
1

感谢 Richard Huxton,我发现了我的问题,据他说 load 'slony1_funcs.2.2.0'; 在 Windows 和 linux 中都给我一个错误,然后我意识到我的 Slony 版本是不同的,在 Windows 中,版本是 2.2.0,在 linux 中是 2.2.2,(在 Windows 和 Postgres 9.3 的 Stackbuilder 中得到不同的 Slony 版本和linux )

所以我从 linux 卸载 Slony 2.2.2 并手动构建和安装 Slony 2.2.0 For Suse Linux。

现在 Windows <==> Linux Slony Replication 工作正常。

于 2014-10-18T05:00:23.977 回答