postgresql – 在ubuntu服务器上从postgres 9.1升级到9.3

我有我的生产服务器(ubuntu 13.10)与postgresql 9.1一起运行.

我想使用9.3的一些功能,因此想要升级.

有人可以帮助我从9.1升级到9.3,以便停机时间不超过30分钟.或者?

主要关注是防止数据丢失或文件冗余.

最佳答案
从不同的主要版本(例如9.1到9.3)升级PostgreSQL基本上有三种方法.

使用pg_dump进行升级

第一个,如果可能,建议使用较新(9.3)版本的二进制文件转储旧版本(9.1),并将其恢复到由较新版本创建的新集群上.

通常,这种方法较慢,但也是最可行的方法.使其更快的一个提示是使用并发.要使用并行作业转储,您可以执行以下操作:

$pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase

您必须为每个数据库执行此操作,将–jobs = 4值调整为任何值(测试从2到核数的某些值,并查看哪个值提供更好的速度).此外,在此阶段,任何人都不应该被绑定到数据库,任何修改都会导致转储损坏(因为非安全选项–no-synchronized-snapshots).

之后,您可以使用pg_restore将转储恢复到新实例:

$createdb <options> -T template0 mydatabase
$pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump

之后,建议在您的数据库上运行ANALYZE:

$vacuumdb --analyze-only mydatabase

(如果你能负担得起时间,只运行 – 分析到VACUUM数据库并更新可见性图)

使用pg_upgrade进行升级

另一种选择是使用the contrib pg_upgrade.使用–link方法,它提供了一种非常快速的升级PostgreSQL的方法.

在使用之前,您必须备份整个数据目录,因为在–link模式下,如果出现问题,您可能会丢失这两个数据(新旧).另外,阅读整个文档,特别是底部的notes(pg_upgrade有一些限制).

更新:
在运行definitive命令之前,请使用–check选项.此外,对于大型数据库,建议在屏幕会话中运行此命令.

使用基于触发器的复制工具升级

升级版本的另一个选择是使用基于触发器的复制工具.像Slony,Bucardo和Londiste.

这是需要尽可能减少停机时间的选项,但它是最难处理的选项.

为此,您需要构建一个主从,其中主服务器是您当前的版本(9.1),从服务器是新版本(9.3).然后,等待第一次同步(系统仍在生产中),然后关闭连接到数据库的所有人(停机时间从这里开始),等待奴隶赶上,促使它(奴隶)掌握和将所有客户端/应用程序重定向到此新版本.而且你已经完成了.

Slony文档提供了到upgrade PostgreSQL using Slony的分步骤.

哪一个选择

嗯,一如既往地依赖,恢复:

>转储恢复是最可靠的,但通常是最慢的(虽然并行性可以给出相当好的结果)
> pg_upgrade是几乎没有停机时间的最佳选择之一(如果可以使用,请参阅限制),它通常只需几分钟,即使对于大型数据库也是如此
>触发器复制,毫无疑问是最少停机时间(接近零),但实际上很难实现,我建议只有经验人员(在PostgreSQL和复制工具上).

我希望我能提供帮助.祝好运.

转载注明原文:postgresql – 在ubuntu服务器上从postgres 9.1升级到9.3 - 代码日志