3.8.4. 継続的なアーカイブバックアップを使用したデータベースの復元
ベースバックアップを復元し、アーカイブされた WAL ファイルを適用してポイントインタイムリカバリーを行うことで、PostgreSQL データベースを復元できます。
手順
サーバーを停止します。
# systemctl stop postgresql.service必要なデータを一時的な場所にコピーします。
必要に応じて、クラスターデータのディレクトリー全体と、すべてのテーブルスペースをコピーします。既存データベースのコピーを 2 つ保持するには、システムに十分な空き領域が必要になることに注意してください。
十分なスペースがない場合は、システムがダウンする前にアーカイブされなかったログが含まれている可能性がある、クラスターの
pg_walディレクトリーの内容を保存します。- クラスターデータディレクトリー、および使用しているテーブルスペースのルートディレクトリー下の既存ファイルおよびサブディレクトリーをすべて削除します。
ベースバックアップからデータベースファイルを復元します。
以下の点を確認してください。
-
ファイルは、正しい所有権 (
rootではなくデータベースシステムのユーザー) で復元されます。 - ファイルは、正しいパーミッションで復元されます。
-
pg_tblspc/サブディレクトリーのシンボリックリンクが正しく復元されます。
-
ファイルは、正しい所有権 (
pg_wal/サブディレクトリーにあるファイルをすべて削除します。このファイルは、ベースバックアップから作成されるため、非推奨になりました。
pg_wal/をアーカイブしていない場合は、適切な権限で再作成します。-
ステップ 2 で保存したアーカイブされていない WAL セグメントファイルを
pg_wal/にコピーします。 クラスターデータディレクトリーの
recovery.confリカバリーコマンドファイルを作成し、restore_command設定パラメーターでシェルコマンドを指定します。cpコマンド、別のコマンド、またはシェルスクリプトを使用できます。以下に例を示します。restore_command = 'cp /mnt/server/archivedir/%f "%p"'サーバーを起動します。
# systemctl start postgresql.serviceサーバーは復元モードに入り、必要なアーカイブ済み WAL ファイルの読み込みを開始します。
外部エラーにより復元が終了した場合は、サーバーを再起動するとリカバリーが続行されます。復元プロセスが完了すると、サーバーは
recovery.confの名前をrecovery.doneに変更します。これにより、サーバーが通常のデータベース操作を開始した後に誤って復元モードに戻ることが防止されます。データベースのコンテンツを確認して、データベースが必要な状態に復元されたことを検証します。
データベースが必要な状態に復元されていない場合は、手順 1 に戻ります。データベースが必要な状態に復元された場合は、
pg_hba.confファイル内のクライアント認証設定を復元して、ユーザーが接続できるようにします。