在 Debian 生产服务器上升级 PostgreSQL 的完整解决方案

在 Debian 生产服务器上升级 PostgreSQL 的完整解决方案

我在几个网站的生产环境中使用 Debian 6 (Squeeze)。我决定使用 postgresql 反向移植,以便我可以使用 PostgreSQL 9.0 功能。我认为它会保留 9.0 并接收该主要版本的更新。

不幸的是,Squueze 反向移植已更新至 PostgreSQL 9.1,所以我可能不会收到 9.0 的更新。

我计划升级到 9.1 但我知道这不会自动完成。

我已经阅读了有关官方 pg_upgrade 和 debian 的 pg_upgradecluster 的信息,但我希望获得完整的升级指南。

  1. 要执行哪些步骤(首先 apt-get install postgresql,然后 pg_upgradecluster,然后删除旧集群)?最好能列出步骤。
  2. 可能出现哪些故障情况?
  3. 如何准备面对失败并做出反应?

我只能停止数据库几个小时,所以我想做好准备

答案1

很难为您提供适合您的情况/环境的分步升级流程。
我试图在下面介绍一些重点,但您确实需要根据您的环境定制该流程。


步骤零,决定是否需要升级。Postgres 9.1 带来了同步复制和许多其他很酷的功能,如果您需要的话,它们会很有用,但如果您不需要的话,就没有理由立即升级。

步骤 1,如果您的数据库很大,则需要很长时间。
即使使用pg_upgrade简单的复制数据进行备份也需要一段时间:我们的 16GB 数据库需要一个小时或更长时间才能进行 pg_dump/pg_restore,或者大约 10-20 分钟才能进行 pg_upgrade。

第 2 步,我建议阅读9.1 发行说明。确保你所需要的东西没有损坏,你使用的东西也没有改变。
没有什么比数据库升级破坏你的生产系统更能毁掉你的一个月了。

步骤3,Postgres 手册的升级部分是必读内容。

步骤 4,(在这里插入任何 Debian 特定的内容,但这真的不是我的专长 :-)

第五步,制定升级计划。

步骤 6,测试升级计划(技术上是可选的,但强烈受到推崇的)。

步骤 7,对生产系统进行升级。


标准警告适用:

  • 升级可能会破坏您的数据库。请进行备份。
    • 确保您能够恢复它。
    • 确保你可以恢复二进制文件对于数据库系统也是如此。
      (如果可以的话,请保留旧的 Debian 软件包 - 我见过有人因为不再有旧的数据库二进制文件而无法退出失败的升级,这确实是一个非常令人伤心的景象。)

  • 这会比你预期的花费更长的时间。为此做好计划。
    我公司的数据库升级政策是“周五下午 6 点开始。如果到周日上午 9 点还不能正常工作,则回滚。”

  • 安装临时文件
    如果您的数据确实很重要,请在其他地方恢复一份副本并测试您的升级路径。
    是的,我对 16GB 数据库执行此操作。如果我能找到一种方法让它工作,我仍然会对 160GB 数据库执行此操作 :-)

答案2

这基本上是第 4 步 - 加上--check确保路径正确的选项。我的安装来自 repos,并且具有文件的标准 debian 路径。

[email protected]:~$ /usr/lib/postgresql/9.1/bin/pg_upgrade --old-datadir /var/lib/postgresql/9.0/main --new-datadir /var/lib/postgresql/9.1/main --old-bindir /usr/lib/postgresql/9.0/bin/ --new-bindir /usr/lib/postgresql/9.1/bin/ --check

上述操作失败了 - 一直提示我在同一个端口上运行两个服务器。

以下方法似乎有效:

pg_dumpall -p 5432 | psql -d postgres -p 6543

这很有用

相关内容