pg_verifybackup — PostgreSQLクラスタのベースバックアップの完全性を確認します
pg_verifybackup
[option
...]
pg_verifybackupは、pg_basebackup
を使って取られたデータベースクラスタバックアップの完全性を、バックアップ時にサーバで生成されたbackup_manifest
と比較して確認するために使われます。
バッックアップは"plain"形式で保管されていなければなりません。"tar"形式のバックアップは展開後に確認できます。
pg_verifybackupにより実行される検証は、バックアップを利用しようとしている動作中のサーバにより実行される検査をすべて含む訳ではありませんし、含むことができる訳でもないことに注意するのは重要です。 このツールを使ったとしても、テストリストアを実行したり、結果のデータベースが期待した通りに動作し、正しいデータを含んでいるように見えることを検証したりすべきです。 しかしながら、pg_verifybackupは、ストレージの問題や利用者のエラーによる多くの問題を検出できます。
バックアップの検証は4つの段階を経て進みます。
第1に、pg_verifybackup
がbackup_manifest
ファイルを読みます。
そのファイルが存在しない、読むことができない、不正である、または、自身の内部チェックサムの検証に失敗した場合には、pg_verifybackup
は致命的なエラーで終了します。
第2に、pg_verifybackup
は、以下に記すようないくつかの例外を除いて、ディスクに保管されているデータファイルがサーバの送ろうと意図したデータファイルと完全に同一かを検証します。
2、3の例外では、余分な、もしくは、失われたファイルが検出されます。
この段階ではpostgresql.auto.conf
、standby.signal
、recovery.signal
の存在、欠如、修正は無視されます。なぜなら、バックアップを取る過程の一部として、このファイルは作成されていたり、修正されていたりすることが予想されるからです。
また、たとえそのファイルがバックアップマニフェストの一覧に載っていたとしても、対象ディレクトリ内のbackup_manifest
ファイルやpg_wal
内のものについて問題視しません。
ファイルだけが検査されます。ディレクトリの存在や欠如は、ディレクトリがなければ、そこに含まれるはずのファイルも必ずないという間接的なものを除き検証されません。
次に、pg_verifybackup
は、すべてのファイルのチェックサムを取り、そのチェックサムをマニフェスト内の値と比較し、計算されたチェックサムがマニフェストに保管されたチェックサムと一致しないファイルに対してエラーを出力します。
この段階は、前の段階でエラーとなったファイルに対しては実行されません。既に問題があると分かっているからです。
前の段階で無視されたファイルは、この段階でも無視されます。
最後にpg_verifybackup
は、マニフェストを使って、バックアップを回復するのに必要な先行書き込みログレコードが存在し、それが読み込めて解析できるかを検証します。
backup_manifest
は、必要となる先行書き込みログレコードに関する情報を含んでおり、pg_verifybackup
は、その情報を使って、先行書き込みログレコードを解析するようpg_waldump
を呼び出します。
pg_waldump
がエラーだけを報告し、それ以外の出力をしないよう--quiet
フラグが使われます。
この水準の検証は、存在しないファイルや内部チェックサムが一致しないなどの明らかな問題を検出するには十分ですが、回復しようとする時に起こりうる問題をすべて検出するほど広範囲に十分なものではありません。
例えば、正しいチェックサムを持つものの馬鹿げた動作を指定する先行書き込みログレコードを生成するサーバのバグは、この方法では検出できません。
バックアップからの回復に必要でない余分なWALが存在すると、それはこのツールでは検査されないことに注意してください。その目的のためにpg_waldump
を別に呼び出して使うことはできます。
また、WALの検証はバージョン固有のものだということにも注意してください。検査するバックアップに付属したバージョンのpg_verifybackup
と、それゆえ、pg_waldump
も使わないとなりません。
対照的に、データファイルの完全性の検査は、backup_manifest
ファイルを生成したサーバのバージョンが何であれ動作します。
pg_verifybackupは以下のコマンドライン引数を受け付けます。
-e
--exit-on-error
バックアップで問題が検出され次第、終了します。
このオプションが指定されていなければ、pg_verifybackup
は問題が検出された後もバックアップの検査を続け、検出した問題をすべてエラーとして報告します。
-i path
--ignore=path
バックアップ内に実際に存在するデータファイルの一覧とbackup_manifest
ファイル内の一覧を比較する時に、指定されたファイルやディレクトリを無視します。相対パス名で指定してください。
ディレクトリが指定された場合、このオプションは、その位置をルートとするサブツリー全体に影響します。
相対パス名が指定されたパス名に一致する場合、余分なファイル、足りないファイル、ファイルサイズの違い、チェックサムの不一致の報告は抑制されます。
このオプションは複数回指定できます。
-m path
--manifest-path=path
バックアップディレクトリのルートにあるものではなく、指定されたパスのマニフェストファイルを使用します。
-n
--no-parse-wal
このバックアップからの回復に必要な先行書き込みログデータを解析しません。
-q
--quiet
バックアップの検証に成功した場合、何も表示しません。
-s
--skip-checksums
データファイルのチェックサムを検証しません。 ファイルの存在、欠如とファイルのサイズは検査されます。 ファイル自身を読み込む必要がありませんので、これはずっと速いです。
-w path
--wal-directory=path
pg_wal
ではなく、指定されたディレクトリのWALファイルを解析しようとします。
バックアップがWALアーカイブとは別の場所に保管されている場合、これは有用でしょう。
他のオプションも使用可能です。
-V
--version
pg_verifybackupのバージョンを表示し、終了します。
-?
--help
pg_verifybackupのコマンドライン引数に関するヘルプを表示し、終了します。
mydbserver
でサーバのバックアップを作成し、バックアップの完全性を検証します。
$
pg_basebackup -h mydbserver -D /usr/local/pgsql/data
$
pg_verifybackup /usr/local/pgsql/data
mydbserver
でサーバのバックアップを作成し、マニフェストをバックアップディレクトリの外のどこかに移動し、バックアップを検証します。
$
pg_basebackup -h mydbserver -D /usr/local/pgsql/backup1234
$
mv /usr/local/pgsql/backup1234/backup_manifest /my/secure/location/backup_manifest.1234
$
pg_verifybackup -m /my/secure/location/backup_manifest.1234 /usr/local/pgsql/backup1234
バックアップディレクトリに手で追加されたファイルを無視し、チェックサムの検証も省略してバックアップを検証します。
$
pg_basebackup -h mydbserver -D /usr/local/pgsql/data
$
edit /usr/local/pgsql/data/note.to.self
$
pg_verifybackup --ignore=note.to.self --skip-checksums /usr/local/pgsql/data