私の運用サーバー(ubuntu 13.10)をpostgresql 9.1で実行しています。
9.3のいくつかの機能を使用したいので、アップグレードしたい。
ダウンタイムが30分以下になるように、9.1から9.3へのアップグレードを誰かが手伝ってくれませんか。とか、ぐらい?
主な関心事は、データの損失やファイルの冗長性の防止です。
PostgreSQLを異なるメジャーバージョン(9.1から9.3など)からアップグレードするには、基本的に3つの方法があります。
最初のものは、可能であれば推奨されますが、古い(9.1)バージョンのダンプを実行する新しい(9.3)バージョンのバイナリを使用し、新しいバージョンで作成された新しいクラスターにそれを復元します。
このアプローチは、一般的に遅いものですが、最も実現可能です。より速くするための1つのヒントは、並行性を使用することです。並列ジョブでダンプするには、次のようにします。
$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase
使用しているデータベースごとにこれを実行し、--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
その後、データベースでANALYZE
を実行することをお勧めします。
$ vacuumdb --analyze-only mydatabase
(時間に余裕がある場合は、--analyze
のみを実行してデータベースもVACUUM
し、可視性マップを更新します)
別のオプションは、 contrib pg_upgrade
を使用することです。 --link
メソッドを使用すると、PostgreSQLを非常に高速にアップグレードできます。
使用する前に、データディレクトリ全体のバックアップを作成する必要があります。--link
モードでは、何か問題が発生すると、両方のデータ(新旧)が失われる可能性があるためです。また、ドキュメント全体、特に下部にある notes を読んでください(pg_upgradeにはいくつかの制限があります)。
更新:確定的なコマンドを実行する前に、--check
オプションを使用してください。また、大規模なデータベースでは、このコマンドをscreenセッションで実行することをお勧めします。
バージョンをアップグレードするもう1つのオプションは、トリガーに基づくレプリケーションツールを使用することです。 Slony、Bucardo、Londisteのように。
これは最小限のダウンタイムを必要とするオプションですが、取り組むのが最も難しいオプションです。
そのためには、マスターが現在のバージョン(9.1)で、スレーブが新しいバージョン(9.3)であるマスター/スレーブを構築する必要があります。次に、最初の同期を待機し(システムはまだ稼働中)、その後、データベースに接続されているすべてのユーザーを閉じ(ダウンタイムはここから開始)、スレーブが追いつくのを待ち、マスター(スレーブ)をマスターに昇格させ、すべてのクライアント/アプリケーションをこの新しいバージョンにリダイレクトします。これで完了です。
Slonyのドキュメントでは、 Slonyを使用してPostgreSQLをアップグレード するための手順を説明しています。
まあ、いつものように、再開します:
お役に立てれば幸いです。幸運を。
Postgres 9.1から9.3にアップグレードするには、次の手順に従います。
まず、ubuntu用に以下の内容で/etc/apt/sources.list.d/pgdg.listファイルを作成します。
deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main
以下を実行するキーを追加します。
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | Sudo apt-key add -
Postgresを使用して開発者ツールをインストールします。
Sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
インストールを確認するために、「Sudo pg_lsclusters」と入力して、PostgreSQLの2つのバージョンが実行されていることを確認します。
Postgressqlサービスを停止します。
Sudo service postgresql stop
9.3インストールによって作成されたデフォルトの9.3クラスターを削除します。
Sudo pg_dropcluster --stop 9.3 main
既存の9.1クラスターから新しい9.3クラスターを作成します。
Sudo pg_upgradecluster 9.1 main
新しいクラスターが読み込まれ、PostgreSQL 9.3が実行されていることを確認します。
Sudo service postgresql start 9.3
すべてが機能する場合は、9.1クラスターにドロップします。
pg_dropcluster --stop 9.1 main