在对现有配置影响最小的情况下升级 EC2 上的 PostgreSQL

在对现有配置影响最小的情况下升级 EC2 上的 PostgreSQL

我在 EC2 实例上安装了 PostgreSQL 9.2,yum install现在需要升级到 PostgreSQL 9.4。我注意到将yum list9.2、9.3 和 9.4 列为完全独立的软件包,因此我不能仅使用 yum 升级功能进行升级。

我有一个需要在升级后继续使用的数据库。此外,我在 ( /文件/var/lib/pgsql9/data中的服务器证书/密钥、对 的更改、对 的更改)中设置了一些配置,这些配置也应该继续使用。.crt.keypg_hba.confpostgresql.conf

我看见这个问题但那里的信息与 yum 包场景无关(并且似乎已经过时),而且没有具体解决配置问题。

在保留我的配置设置并确保数据库在升级后可运行的同时,完成升级的正确/推荐的方法是什么?

答案1

我找到了一种方法来做到这一点,但我不确定这是否是正确/推荐的方法。我的步骤如下:

1.保存现有配置

运行sudo vim /var/lib/pgsql9/data/postgresql.conf并将sudo vim /var/lib/pgsql9/data/pg_hba.conf所有未注释的设置复制到某处。稍后您必须在新的 PostgreSQL 版本中手动设置它们。

2.安装新的 PostgreSQL 版本

使用yum list查找正确的软件包名称并安装它们。在我的例子中,我sudo yum install postgresql94.x86_64需要sudo yum install postgresql94-server.x86_64

运行postgres --versionpg_dumpall --versionpsql --version确保版本已更新为新版本。

3.保存现有数据并关闭数据库

停止任何可能更改数据库的进程(例如您的 Web 应用程序)。运行sudo pg_dumpall >db.out,然后立即sudo service postgresql stop运行 以停止服务器并防止进一步的数据更改。使用 检查生成的数据转储vim db.out- 它应该包含纯 SQL 格式的所有 DB 架构和数据。您可能希望在继续之前备份此文件。

4.保存旧数据库目录

sudo mv /var/lib/pgsql9 /var/lib/pgsql9.old

5. 为新版本的 PostgreSQL 创建新的数据库目录

sudo mkdir /var/lib/pgsql9

sudo chown postgres /var/lib/pgsql9

sudo su postgres

sudo su提示中: initdb -D /var/lib/pgsql9/data

然后按Ctrl-D

6.将证书复制到新的数据库目录

如果您正在使用证书,请将其复制到新目录并赋予其适当的所有权,例如:

sudo cp /var/lib/pgsql9.old/data/server.key /var/lib/pgsql9/data

sudo cp /var/lib/pgsql9.old/data/server.crt /var/lib/pgsql9/data

sudo chown postgres /var/lib/pgsql9/data/server.crt

sudo chown postgres /var/lib/pgsql9/data/server.key

7.配置新数据库

使用sudo vim /var/lib/pgsql9/data/postgresql.confsudo vim /var/lib/pgsql9/data/pg_hba.conf根据您在步骤 1 中保存的设置配置数据库。

8.修复postgresql服务以指向新版本

运行ls -ila /etc/rc.d/init.d- 注意每个版本都有一个脚本(postgresql92postgresql94),但postgresql脚本本身链接到旧版本。通过运行sudo ln -sf /etc/rc.d/init.d/postgresql94 /etc/rc.d/init.d/postgresql并再次运行ls命令来修复此问题,以验证链接是否正确。

9.运行服务

运行sudo service postgresql start。如果服务无法启动,则可能是权限错误(您忘记了chown上面的步骤)或配置语法错误。您可以查看日志(/var/lib/pgsql94/pgstartup.log和 中的文件/var/lib/pgsql9/data/pg_log)来查找错误。如果服务已正确启动,您可以运行sudo su postgres,然后psql验证您的数据库是否正在运行(使用\q退出并按 Ctrl-D 退出sudo su)。

10.恢复旧数据

sudo cp db.out /var/lib/pgsql9/data

sudo chown postgres /var/lib/pgsql9/data/db.out

sudo su postgres

在该提示中:

psql -d postgres -f /var/lib/pgsql9/data/db.out

您应该会看到一堆数据库命令滚动显示。此时您的数据库已升级并正在运行。您可以通过运行 进行验证psql。使用\list命令查看数据库列表、\connect (database_name)连接到数据库、\dt在连接后查看表列表,或运行以分号结尾的 SQL 命令。键入\q退出。

验证完成后,按Ctrl-D退出sudo su

11. 清理

此时,一旦您确定一切正常,您可以删除/var/lib/pgsql9.old/var/lib/pgsql9/db.outdb.out任何其他备份。

相关内容