web-dev-qa-db-ja.com

ubuntuサーバーでのpostgres 9.1から9.3へのアップグレード

私の運用サーバー(ubuntu 13.10)をpostgresql 9.1で実行しています。

9.3のいくつかの機能を使用したいので、アップグレードしたい。

ダウンタイムが30分以下になるように、9.1から9.3へのアップグレードを誰かが手伝ってくれませんか。とか、ぐらい?

主な関心事は、データの損失やファイルの冗長性の防止です。

27
Ram Kumar

PostgreSQLを異なるメジャーバージョン(9.1から9.3など)からアップグレードするには、基本的に3つの方法があります。

Pg_dumpによるアップグレード

最初のものは、可能であれば推奨されますが、古い(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し、可視性マップを更新します)

Pg_upgradeによるアップグレード

別のオプションは、 contrib pg_upgrade を使用することです。 --linkメソッドを使用すると、PostgreSQLを非常に高速にアップグレードできます。

使用する前に、データディレクトリ全体のバックアップを作成する必要があります。--linkモードでは、何か問題が発生すると、両方のデータ(新旧)が失われる可能性があるためです。また、ドキュメント全体、特に下部にある notes を読んでください(pg_upgradeにはいくつかの制限があります)。

更新:確定的なコマンドを実行する前に、--checkオプションを使用してください。また、大規模なデータベースでは、このコマンドをscreenセッションで実行することをお勧めします。

トリガーベースのレプリケーションツールを使用したアップグレード

バージョンをアップグレードするもう1つのオプションは、トリガーに基づくレプリケーションツールを使用することです。 Slony、Bucardo、Londisteのように。

これは最小限のダウンタイムを必要とするオプションですが、取り組むのが最も難しいオプションです。

そのためには、マスターが現在のバージョン(9.1)で、スレーブが新しい​​バージョン(9.3)であるマスター/スレーブを構築する必要があります。次に、最初の同期を待機し(システムはまだ稼働中)、その後、データベースに接続されているすべてのユーザーを閉じ(ダウンタイムはここから開始)、スレーブが追いつくのを待ち、マスター(スレーブ)をマスターに昇格させ、すべてのクライアント/アプリケーションをこの新しいバージョンにリダイレクトします。これで完了です。

Slonyのドキュメントでは、 Slonyを使用してPostgreSQLをアップグレード するための手順を説明しています。

どちらを選ぶか

まあ、いつものように、再開します:

  • Dump + restoreが最も信頼できますが、一般的に最も遅いものです(ただし、並列処理でかなり良い結果が得られます)。
  • Pg_upgradeは、ダウンタイムを最小限に抑えるための最良のオプションの1つです(使用できる場合は、制限を確認してください)。大規模なデータベースであっても、数分しかかかりません。
  • トリガーレプリケーションは、間違いなく可能な限りダウンタイムが少ない(ゼロに近い)ものですが、達成するのは非常に難しく、経験豊富な人(PostgreSQLとレプリケーションツールの両方)にのみお勧めします。

お役に立てれば幸いです。幸運を。

28
MatheusOl

Postgres 9.1から9.3にアップグレードするには、次の手順に従います。

  1. まず、ubuntu用に以下の内容で/etc/apt/sources.list.d/pgdg.listファイルを作成します。

    deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 
    
  2. 以下を実行するキーを追加します。

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | Sudo apt-key add -
    
  3. Postgresを使用して開発者ツールをインストールします。

    Sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
    
  4. インストールを確認するために、「Sudo pg_lsclusters」と入力して、PostgreSQLの2つのバージョンが実行されていることを確認します。

  5. Postgressqlサービスを停止します。

    Sudo service postgresql stop
    
  6. 9.3インストールによって作成されたデフォルトの9.3クラスターを削除します。

    Sudo pg_dropcluster --stop 9.3 main
    
  7. 既存の9.1クラスターから新しい9.3クラスターを作成します。

    Sudo pg_upgradecluster 9.1 main
    
  8. 新しいクラスターが読み込まれ、PostgreSQL 9.3が実行されていることを確認します。

    Sudo service postgresql start 9.3
    
  9. すべてが機能する場合は、9.1クラスターにドロップします。

    pg_dropcluster --stop 9.1 main
    

詳細については、このリンクを参照してください

7
Snehal Parmar

これは本当に便利かもしれません:

https://Gist.github.com/ibussieres/11262268

12.04用ですが、かなり転送可能だと思います。

0
IanBussieres