ITパスポート対策

バックアップ

データベースは壊れます。ディスクの故障、操作ミス、ランサムウェアによる暗号化と、原因はいくらでもあります。壊れた後にどこまで戻せるかを決めるのがバックアップの設計です。試験では方式の名前と、復旧にかかる手数がセットで問われます。

3つのバックアップ方式

方式何を保存するか取得の時間復旧の手数
フルバックアップ全データ長いフル1つだけ
差分バックアップ直前のフル以降に変わった分中くらいフル1つ+最新の差分1つ
増分バックアップ直前のバックアップ以降に変わった分短いフル1つ+その後の増分すべて

差分と増分の違いは「どこからの変化か」です。差分は毎回フルの時点からの変化なので、日がたつほどサイズが膨らみます。増分は前回のバックアップからの変化だけなので、毎回小さいままです。そのかわり復旧では途中の増分を1つも欠かさず順番に戻す必要があります。

手数を実際に数える

日曜の夜にフルバックアップを取り、月曜から金曜まで毎晩バックアップを取る運用を考えます。金曜の夜のバックアップが終わった後、土曜にディスクが壊れました。

差分方式なら、戻すのは日曜のフルと金曜の差分の合計2つです。月曜から木曜の差分は、金曜の差分にすべて含まれているので不要です。

増分方式なら、日曜のフルに加えて、月・火・水・木・金の増分を古い順に5つ適用します。合計6つです。しかも増分が1つでも壊れていると、そこから先が戻せません。

取得が速いのは増分、復旧が速いのは差分。試験ではこのトレードオフを「バックアップの取得時間を短くしたい」「復旧を単純にしたい」という要件の形で聞いてきます。要件がどちらを向いているかで答えを選びます。手数を数えさせる問題も定番なので、上の例のように曜日を並べて数えられるようにしておいてください。

ログによる復旧

バックアップは1日1回など、間隔をあけて取ります。すると前回のバックアップ以降の更新は、バックアップのどこにも残っていません。これを埋めるのがログファイルです。DBMSは更新のたびに、更新前の値と更新後の値をログに記録しています。

ロールフォワードは、バックアップを復元したうえで、その後のログの更新後の値を順に適用し、障害の直前まで進める操作です。ディスク障害でデータが失われたときに使います。

ロールバックは、中途半端に終わったトランザクションについて、ログの更新前の値を使って開始前の状態に戻す操作です。処理の異常終了やコミット前の停電で使います。

前に戻すのがロールバック、先に進めるのがロールフォワード。使う値も、戻すときは更新前の値、進めるときは更新後の値と対になっています。名前と向きと使う値の3点セットで覚えると、入れ替え問題に引っかかりません。

3-2-1ルール

保管のしかたにも定石があります。3-2-1ルールと呼ばれ、次の3点を指します。

  • データのコピーを3つ持つ(元データ1つとバックアップ2つ)
  • 2種類の異なる媒体に保存する
  • そのうち1つは離れた場所に保管する

同じサーバの別ドライブに置いただけでは、火災や水害でまとめて失われます。ランサムウェアに感染したときも、つながったままの保存先は一緒に暗号化されます。遠隔地保管やネットワークから切り離した保管が必要になるのはこのためです。

事業継続の観点では、どの時点まで戻せればよいかを表すRPOと、どれだけの時間で復旧するかを表すRTOという指標も出ます。1日1回のバックアップならRPOは最大24時間、つまり最悪1日分の更新をあきらめる設計だ、という読み方をします。

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部