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

Ram*_*mar 27 postgresql postgresql-9.1

我的生产服务器(ubuntu 13.10)在 postgresql 9.1 上运行。

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

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

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

Mat*_*sOl 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
Run Code Online (Sandbox Code Playgroud)

您必须为您拥有的每个数据库执行此操作,将--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
Run Code Online (Sandbox Code Playgroud)

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

$ vacuumdb --analyze-only mydatabase
Run Code Online (Sandbox Code Playgroud)

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

使用 pg_upgrade 升级

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

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

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

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

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

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

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

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

选择哪一个

好吧,一如既往,继续:

  • dump+restore 是最可靠的,但通常是最慢的(尽管并行性可以给出很好的结果)
  • pg_upgrade 是减少停机时间的最佳选择之一(如果您可以使用,请参阅限制),它通常只需要几分钟,即使对于大型数据库
  • 触发器复制无疑是停机时间最短(接近零)的一种,但它真的很难实现,我只推荐有经验的人(在 PostgreSQL 和复制工具上)。

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


小智 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 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加运行以下密钥:

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

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

  5. 停止 Postgressql 服务:

    sudo service postgresql stop
    
    Run Code Online (Sandbox Code Playgroud)
  6. 删除由 9.3 安装创建的默认 9.3 集群。

    sudo pg_dropcluster --stop 9.3 main
    
    Run Code Online (Sandbox Code Playgroud)
  7. 从现有的 9.1 集群创建一个新的 9.3 集群。

    sudo pg_upgradecluster 9.1 main
    
    Run Code Online (Sandbox Code Playgroud)
  8. 确认新集群已加载并且我们正在运行 PostgreSQL 9.3。

    sudo service postgresql start 9.3
    
    Run Code Online (Sandbox Code Playgroud)
  9. 如果一切正常,请降到 9.1 集群。

    pg_dropcluster --stop 9.1 main
    
    Run Code Online (Sandbox Code Playgroud)

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