从ubuntu服务器上的Postgres 9.1升级到9.3


27

我的生产服务器(ubuntu 13.10)与PostgreSQL 9.1一起运行。

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

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

主要问题是防止数据丢失或文件冗余。



我本身不是DBA(必须照顾奇怪的Postgres安装甚至更奇怪的mysql;}),并且这篇文章很旧,但是为什么您要使用任何Ubuntu X.10发行版而不是X.04? LTS?
天衣

Answers:


28

从不同的主要版本(例如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

(如果你有足够的时间,只运行--analyzeVACUUM数据库和更新的知名度映射)

用pg_upgrade升级

另一种选择是使用contribpg_upgrade。使用该--link方法,它提供了一种升级PostgreSQL的非常快速的方法。

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

更新:请--check在运行权威命令之前使用该选项。另外,对于大型数据库,建议在屏幕会话中运行此命令。

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

升级版本的另一种方法是使用基于触发器的复制工具。像Slony,Bucardo和Londiste。

此选项需要最少的停机时间,但这是最难处理的选项。

为此,您需要构建一个主从服务器,其中主服务器是当前版本(9.1),而从服务器是新版本(9.3)。然后,您等待第一次同步(系统仍处于生产状态),然后关闭所有连接到数据库的用户(停机从此处开始),等待从属服务器追赶,将其升级为主服务器,然后将其升级为主服务器。将所有客户端/应用程序重定向到此新版本。这样就完成了。

Slony文档提供了使用Slony升级PostgreSQL的分步指南。

选择哪一个

好吧,一如既往,恢复:

  • 转储+还原是最可靠的,但通常是最慢的(尽管并行性可以提供相当不错的结果)
  • pg_upgrade是减少停机时间的最佳选择之一(如果可以使用,请参见限制),即使对于大型数据库,它通常也只需几分钟
  • 触发器复制无疑是使停机时间最少(接近零)的触发器复制,但是确实很难实现,我只建议有经验的人使用(在PostgreSQL和复制工具上)。

希望我能帮上忙。祝好运。


pg_upgrade也可以从8.4.17到9.3吗?
JohnMerlino 2014年

@JohnMerlino:是的,pg_upgrade可以从8.3或更高版本升级(它包括8.3、8.4、9.0、9.1、9.2等)。
MatheusOl 2014年

“使用较新版本(9.3)的二进制文件”可能不是必需的。我至少已经使它能够正常工作。
theicfire '17

@theicfire实际上取决于两个版本(旧版本和新版本),它可能会起作用,也可能不会起作用。实际上,它可以在大多数情况下工作,除了一些通常会引起错误的错误消息外…… 官方程序是使用较新版本的二进制文件!
MatheusOl

您可能可以一次性pg_dumpall转储所有数据库。
Matthieu

7

请按照以下步骤将postgres 9.1升级到9.3:

  1. 首先为ubuntu创建一个/etc/apt/sources.list.d/pgdg.list文件,其中包含以下内容:

    deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 
  2. 添加以下运行的密钥:

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  3. 使用postgres安装开发人员工具:

    sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
  4. 为了确认我们的安装,我们将输入“ sudo pg_lsclusters”并查看我们运行的两个版本的PostgreSQL。

  5. 停止Postgressql服务:

    sudo service postgresql stop
  6. 删除由9.3安装创建的默认9.3群集。

    sudo pg_dropcluster --stop 9.3 main
  7. 从现有的9.1群集中创建一个新的9.3群集。

    sudo pg_upgradecluster 9.1 main
  8. 确认新集群已加载并且我们正在运行PostgreSQL 9.3。

    sudo service postgresql start 9.3
  9. 如果一切正常,请降至9.1群集。

    pg_dropcluster --stop 9.1 main

有关更多信息,请参考此链接


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.