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パッケージのシナリオに関連しておらず(そして時代遅れのようです)、さらに構成の懸念に具体的に対処していません。
構成設定を維持し、アップグレード後にデータベースが動作可能であることを確認しながら、アップグレードを実行するための適切な/推奨される方法は何ですか?
これを行う方法を見つけましたが、それが適切/推奨される方法かどうかはわかりません。私の手順は以下のとおりです。
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 --version
、pg_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
を実行します-すべてのバージョン(postgresql92
、postgresql94
)のスクリプトがあることに注意してください。ただし、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.out
、db.out
およびその他のバックアップを削除できます。