web-dev-qa-db-ja.com

既存の設定への影響を最小限に抑えたEC2でのPostgreSQLのアップグレード

EC2インスタンスにyum installを使用してPostgreSQL9.2をインストールしています。 PostgreSQL9.4にアップグレードする必要があります。 yum listには9.2、9.3、9.4が完全に別個のパッケージとしてリストされているので、yumアップグレード機能を使用してアップグレードすることはできません。

アップグレード後も存続する必要のあるデータベースがあります。さらに、/var/lib/pgsql9/data.crt/.keyファイルのサーバー証明書/キー、pg_hba.confに変更、postgresql.confに変更)にいくつかの構成を設定しています。また生き残る必要があります。

私は この質問 を見ましたが、そこにある情報はyumパッケージのシナリオに関連しておらず(そして時代遅れのようです)、さらに構成の懸念に具体的に対処していません。

構成設定を維持し、アップグレード後にデータベースが動作可能であることを確認しながら、アップグレードを実行するための適切な/推奨される方法は何ですか?

2

これを行う方法を見つけましたが、それが適切/推奨される方法かどうかはわかりません。私の手順は以下のとおりです。

1。既存の構成を保存します

Sudo vim /var/lib/pgsql9/data/postgresql.confSudo vim /var/lib/pgsql9/data/pg_hba.confを実行し、コメントされていないすべての設定をどこかにコピーします。後で、新しいPostgreSQLバージョンで手動で設定する必要があります。

2。新しいPostgreSQLバージョンをインストールします

yum listを使用して正しいパッケージ名を見つけ、それらをインストールします。私の場合、Sudo yum install postgresql94.x86_64Sudo yum install postgresql94-server.x86_64をする必要がありました

postgres --versionpg_dumpall --version、およびpsql --versionを実行して、バージョンが新しいバージョンに更新されていることを確認します。

。既存のデータを保存し、データベースをシャットダウンします

データベースを変更する可能性のあるプロセス(Webアプリなど)をすべて停止します。 Sudo pg_dumpall >db.outを実行し、その直後にSudo service postgresql stopを実行してサーバーを停止し、それ以上のデータ変更を防ぎます。結果のデータダンプをvim db.outで調べます。すべてのDBスキーマとデータがプレーンSQL形式である必要があります。続行する前に、このファイルをバックアップすることをお勧めします。

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.confおよびSudo 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およびその他のバックアップを削除できます。

3