本番サーバー(ubuntu 13.10)をpostgresql 9.1で実行しています。
9.3のいくつかの機能を使用したいので、アップグレードしたい。
ダウンタイムが30分以内になるように、誰かが9.1から9.3にアップグレードするのを手伝ってもらえますか。とか、ぐらい?
主な関心事は、データの損失やファイルの冗長性の防止です。
本番サーバー(ubuntu 13.10)をpostgresql 9.1で実行しています。
9.3のいくつかの機能を使用したいので、アップグレードしたい。
ダウンタイムが30分以内になるように、誰かが9.1から9.3にアップグレードするのを手伝ってもらえますか。とか、ぐらい?
主な関心事は、データの損失やファイルの冗長性の防止です。
回答:
PostgreSQLを異なるメジャーバージョン(9.1から9.3など)からアップグレードするには、基本的に3つの方法があります。
最初の(できれば推奨される)方法は、新しい(9.3)バージョンのバイナリを使用して古い(9.1)バージョンのダンプを行い、新しいバージョンで作成された新しいクラスターに復元することです。
このアプローチは、一般に低速ですが、最も実現可能です。より高速にするための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
、可視性マップを更新します)
別のオプションは、contribpg_upgrade
を使用することです。この--link
方法を使用すると、PostgreSQLを非常に高速にアップグレードできます。
使用する前に、データディレクトリ全体のバックアップを作成する必要があり--link
ます。モードでは、何か問題が発生した場合、両方のデータ(新旧)が失われる可能性があるためです。また、ドキュメント全体と特に下部の注意事項を読んでください(pg_upgradeにはいくつかの制限があります)。
更新:--check
決定的なコマンドを実行する前にオプションを使用してください。また、大規模なデータベースの場合、このコマンドをスクリーンセッションで実行することをお勧めします。
バージョンをアップグレードする別のオプションは、トリガーに基づいた複製ツールを使用することです。Slony、Bucardo、Londisteのように。
これは、可能な限り最小のダウンタイムを必要とするオプションですが、作業するのが最も難しいオプションです。
そのためには、マスターが現在のバージョン(9.1)で、スレーブが新しいバージョン(9.3)であるマスタースレーブを構築する必要があります。次に、最初の同期を待機し(システムはまだ運用中)、その後、データベースに接続している全員を閉じ(ダウンタイムはここから始まります)、スレーブが追いつくのを待ち、マスター(スレーブ)に昇格させ、すべてのクライアント/アプリケーションをこの新しいバージョンにリダイレクトします。これで完了です。
Slonyのドキュメントには、Slonyを使用してPostgreSQLをアップグレードするための段階的な手順が記載されています。
まあ、いつものように、再開:
私が助けてくれることを願っています。がんばろう。
pg_dumpall
にダンプするために使用できる場合があります。
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」と入力し、2つのバージョンのPostgreSQLが実行されていることを確認します。
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