【ふぉわーどりかばり】

フォワードリカバリ とは?

💡 バックアップ+ログの再生で、障害直前まで巻き戻す復旧術
📌 このページのポイント
フォワードリカバリ(ロールフォワード)の流れ バックアップ 月曜 0:00 Tx1 Tx2 Tx3 Tx4 障害発生! 火曜 14:30 ← トランザクションログ → 復旧手順: Step 1 バックアップを復元 (月曜 0:00 の状態) Step 2 ログを順番に再適用 Tx1 → Tx2 → Tx3 → Tx4 復旧完了 障害直前の 状態に復旧 注意: トランザクションログが破損・欠損していると、その地点以降は復旧できない → ログはDB本体とは別のディスク・遠隔地に保管するのがベストプラクティス
バックアップ復元後にトランザクションログを再適用して障害直前まで復旧する
ひよこ ひよこ

フォワードリカバリってどういう仕組みなの?

ペンギン先生 ペンギン先生

まず定期的に取っておいたバックアップを復元するんだ。でもバックアップは少し前の状態だよね。そこからトランザクションログ(更新記録)を1つずつ再適用して、障害が起きた直前の状態まで「前に進める」んだよ

ひよこ ひよこ

ロールバックとは違うの?

ペンギン先生 ペンギン先生

逆方向だね。ロールバックは「未完了のトランザクションを取り消して戻す」操作。フォワードリカバリは「完了済みのトランザクションを再適用して進める」操作だよ。後ろに戻すか前に進めるかの違いだね

ひよこ ひよこ

バックアップだけじゃダメなの?

ペンギン先生 ペンギン先生

バックアップは例えば毎日深夜に取るとすると、最大24時間分のデータが失われる可能性があるよね。フォワードリカバリならログさえ残っていれば障害の数秒前まで復旧できる。これをポイントインタイムリカバリ(PITR)って呼ぶんだ

ひよこ ひよこ

ログが壊れてたらどうなるの?

ペンギン先生 ペンギン先生

それが最大のリスクだね。ログが破損や欠損していると、その地点以降は復旧できなくなる。だからログファイルはDB本体とは別のディスクに保存したり、リアルタイムで遠隔地にレプリケーションしたりするのが鉄則だよ

ひよこ ひよこ

実際の運用ではどう設定するの?

ペンギン先生 ペンギン先生

PostgreSQLならWALアーカイブを有効にして、pg_basebackupで定期バックアップを取る。復旧時はrecovery_target_timeで「この時刻まで戻して」と指定できるよ。AWS RDSなら自動バックアップとPITRが最初から組み込まれていて、コンソールからワンクリックで復旧できるんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
フォワードリカバリって出てきたら「バックアップにログを再適用して障害直前まで戻す復旧方法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Forward Recovery」 = 前進回復
💬 Forward(前へ進む)+ Recovery(回復)で、ログを前に向かって再生していくイメージだよ。ロールフォワード(Roll Forward)という別名のほうが直感的かもしれないね
← 用語集にもどる