私はしばらくの間Postgres 9.1のホットバックアップに取り組んできましたが、一貫した問題に遭遇しました。スレーブサーバーでPostgresを再起動すると、pgstartlogログファイルとpg_logディレクトリの下の日次ログファイルがエラーなしで読み込まれます。ただし、psqlコマンドを使用してデータベースに入力しようとすると、エラーが発生します。
FATAL:データベースシステムが起動しています。
また、recovery.confファイルはrecovery.doneにはなりません。私はこのエラーを徹底的に調査し、一貫して同じ応答を見つけました。Postgresを再起動しようとする前にデータベースが完全にシャットダウンされていません。Postgresを再起動した唯一の方法は、service postgresql-9.1 restart
or /etc/init.d/postgresql-9.1 restart
コマンドを使用することです。このエラーを受け取った後、すべてのプロセスを強制終了し、データベースを再起動しようとしますが、それでも同じエラーを受け取ります。ここからどこへ行くか、この問題を修正する方法が不足しています。以下は、ホットバックアップを完了するために行った正確なプロセスです。
マスターサーバーの構成:
pg_hba.conf、次の行を追加しました:
ホスト複製postgres IPAddressOfSlaveServer信頼
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 listen_address = '*' ポート= 5432 max_wal_senders = 5 wal_keep_segments = 32
スレーブサーバーの構成:
postgresql.conf:
hot_standby = on
recovery.conf:
standby_mode = on primary_conninfo = host = IPAddressOfMasterServer ポート= 5432 ユーザー= postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "%p"'
両方のサーバーを構成した後
マスターサーバー上のpostgresユーザーに変更し、コマンドを実行します。
psql -c "Select pg_start_backup( 'label'、true);"; rsync -a -v -e ssh /var/lib/pgsql/9.1/data slave:/var/lib/pgsql/9.1/data \ -postmaster.pidを除外 pgsql -c "select pg_stop_backup();";
データベースをスレーブサーバーと同期した後
スレーブサーバーを再起動しても、起動は失敗しません。pgstartup.logの読み取り:
成功。これで、次を使用してデータベースサーバーを起動できます。 /usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data または /usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l logfile start
当日のログファイルpostgresql-Thu.logは次のように読み取ります。
ログ:シャットダウン ログ:データベースシステムがシャットダウンされました ログ:2012年4月10日にデータベースシステムが復旧中にシャットダウンしました ログ:スタンバイモードに入る ログ:アーカイブからログファイル「logFileName」を復元しました ログ:0 / BF0000B0で一貫性のある回復状態に達しました ログ:0 / BF000020からやり直しを開始 ログ:アーカイブからログファイル「logFileName」を復元しました ログ:ログファイル0、セグメント192、オフセット0の予期しないpageaddr 0/85000000 ログ:ログファイル0、セグメント192、オフセット0の予期しないpageaddr 0/85000000 ログ:プライマリに正常に接続されたストリーミングレプリケーション
予期しないpageaddrを調査し、postgresアーカイブから、それが非常に正常であり、WALの終わりを検出する予想される方法の1つであることを理解しています。
どんなアドバイスも大歓迎です。