スクリプトを使用して PostgreSQL データベースをバックアップおよびリストアする
PostgreSQL データベースのバックアップを実行するために、以下のスクリプトを使用できます。スクリプトを実行するときに、バックアップを実行するためにデータベースを停止する必要はありません。
- postgresql_backup_pre.sh: このスクリプトは、データベースをバックアップモードにします。
- postgresql_snapshot_post.sh: このスクリプトは、バックアップモードからデータベースを削除します。
- postgresql_settings: これは、PostgreSQL 変数の更新が必要になる可能性がある環境設定ファイルです。
- postgresql_backup_post.sh: このスクリプトは、バックアップ ステータスに関するログを更新します。
前提条件
バックアップを開始する前に、以下のことを確認してください。
- WAL レベルをアーカイブ(または hot_standby)に設定する
- archive_mode をオンに設定する
- archive_command を設定してアーカイブの場所を指定する
注: 設定を適用するには、postgresql.conf ファイルでこれらの設定を行った後、サーバを再起動します。
以下のコマンドは、再起動後にアーカイブ モードのステータスを確認することができます。
- show archive_mode
- show archive_command
- show WAL level
スクリプトの適用
以下の手順に従います。
- 以下の 4 つのファイルを含む LinuxPostgres.zip を展開します: postgresql_backup_pre.sh、postgresql_snapshot_post.sh、postgresql_settings、postgresql_backup_post.sh
- 実行前/実行後のバックアップ/スナップショットから、Linux バックアップ サーバの以下のパス(/opt/Arcserve/d2dserver/usr/prepost)にファイルをコピーします。
- postgresql_settings を「/root/backup」のソース パスにコピーします。
- postgresql_settings で変数に対して設定されたすべての値を確認し、環境に応じて必要な変更を行います。
- UDP コンソールからプランを設定し、PostgreSQL ノードをソースとして選択します。
-
- バックアップ ステータスを確認します。PostgreSQL バックアップのステータスを確認するには、arcserve_postgresql_backup_${DATE}.log ファイルを確認します。このログファイルは、ユーザが設定したディレクトリに作成されます。ディレクトリの設定の詳細については、postgresql_settings ファイルを参照してください。
PostgreSQL データベースのリストア
以下の手順に従います。
- データベース サーバを停止します。
- 元の場所にリストアするには、以下の手順に従います。
- 現在の「/data」フォルダからファイルとディレクトリを削除します。
- 「/data」フォルダ全体のリストアを実行します。
- 「/data」フォルダからリストアが完了したら、以下のフォルダからファイルを削除します。
- pg_dynshmem/
- pg_notify/
- pg_serial/
- pg_snapshots/
- pg_stat_tmp/
- pg_subtrans/
- pg_internal.init
- WAL アーカイブ用に設定されたフォルダに移動し、以下を実行します。
- リストアされた pg_wal ディレクトリ内に存在するファイルを削除します。このファイルには、バックアップ中に実行されたトランザクションに関する情報が含まれます。
- データの整合性とポイント インタイム復旧のため、ユーザ定義済みのアーカイブの場所から pg_wal フォルダにファイルをコピーします。
- データベース サーバを起動します。
同じサーバ上の別の場所にリストアする
- データベース サーバを停止します。
- [new_data_directory_path]に設定して PGDATA を実行します。
- ' Initdb ' cmd を使用して、新しく作成された DB を初期化します。
- 現在の「/data」フォルダからファイルとディレクトリを削除します。
- 「/data」フォルダ全体のリストアを実行します。
- 「/data」フォルダからリストアが完了したら、以下のフォルダからファイルを削除します。
- pg_dynshmem/
- pg_notify/
- pg_serial/
- pg_snapshots/
- pg_stat_tmp/
- pg_subtrans/
- pg_internal.init
- WAL アーカイブ用に設定されたフォルダに移動し、以下を実行します。
- リストアされた pg_wal ディレクトリ内に存在するファイルを削除します。このファイルには、バックアップ中に実行されたトランザクションに関する情報が含まれます。
- データの整合性とポイント インタイム復旧のため、ユーザ定義済みのアーカイブの場所から pg_wal フォルダにファイルをコピーします。
- データベース サーバを起動します。
- 注: PGDATA が更新されたセッションでデータベースの起動が実行されていることを確認してください。
制限事項
PostgreSQL データベースがデフォルト以外のポートで設定されている場合、上記のスクリプトはバックアップの実行には役立ちません。スクリプトは、デフォルト ポート番号 5432 でのみ動作します。
回避策として、以下の推奨事項を使用して、postgresql_backup_pre.sh および postgresql_snapshot_post.sh スクリプトを手動で変更します。
- postgresql_backup_pre.sh:
- オリジナル: sudo -u ${USERNAME} -H -- psql -c "SELECT pg_start_backup('Arcserve UDP backup - ${DATE} $(timestamp)', true)" >> ${LOG} 2>&1
- 変更済み: sudo -u ${USERNAME} -H -- psql -p 5432 -c "SELECT pg_start_backup('Arcserve UDP backup - ${DATE} $(timestamp)', true)" >> ${LOG} 2>&1
- postgresql_snapshot_post.sh:
- オリジナル: sudo -u ${USERNAME} -H -- psql -c "SELECT pg_stop_backup()" >> ${LOG} 2>&1
- 変更済み: sudo -u ${USERNAME} -H -- psql -p 5432 -c "SELECT pg_stop_backup()" >> ${LOG} 2>&1