バックアップ・復旧

バックアップは「取れている」と「戻せる」が別物

結論:バックアップの成否は、戻したときにしか分からない

「バックアップは毎日取っています」— 保守の打ち合わせで最もよく聞く言葉です。そして、最も検証されていない言葉でもあります。

バックアップには、別々の 2 つの問いがあります。取れているかと、戻せるかです。前者は仕組みの話、後者は運用の話で、障害のときに必要になるのは後者だけです。

ところが日々の運用で確認されるのは、ほぼ前者だけです。管理画面に「成功」と並んでいるのを見て安心する。その状態で数年が過ぎ、いざ戻す段になって初めて、戻せないことが分かります。

「取れている」は、思っているより頼りない

1. 「成功」と記録されているのに、中身が空

バックアップ処理の「成功」は、多くの場合コマンドが終了コード 0 で終わったことしか意味しません。出力されたファイルの中身までは見ていません。

実際に起きるのは、こういう形です。存在しないサブコマンドを叩いている、あるいは認証に失敗している。それでも処理全体は続行し、出力先には0 バイトのファイルが残る。ログには「成功」と記録される。翌日も、その翌日も、同じことが繰り返されます。

防ぐのは難しくありません。出力そのものを確かめることです。

  • データベースのダンプなら、末尾に完了を示す行があるか
  • ファイルの書庫なら、展開できるか・想定した数のファイルが入っているか
  • 最低限、サイズが 0 でないか

最後の 1 つだけでも、かなりの事故は防げます。

2. 終了コードが、成否を表していないことがある

サーバー管理ツールのコマンドラインには、内部で失敗しているのに 0 で終了するものがあります。本当の結果は、まったく別のログファイルにしか書かれていない、ということが起こります。

終了コードを成否の判定に使っているなら、それが本当に失敗を捕まえられるのかを一度確かめてください。確実なのはわざと失敗させてみることです。存在しないデータベースを指定する、書き込めない場所を出力先にする。それで検知の仕組みが鳴らなければ、その仕組みは本番でも鳴りません。

これは監視全般に言えることですが、鳴らない監視と、異常が無い状態は、外から見分けがつきません

3. 対象から漏れている

WordPress を戻すには、ファイルとデータベースの両方が要ります。片方だけでは戻せません。

どこにあるか何が入っているか
データベース投稿・固定ページ・カテゴリ・各種設定・プラグインの設定・問い合わせの記録
ファイルアップロードした画像や PDF・テーマ・プラグイン本体・wp-config.php

どちらかが欠けると、戻した結果は「記事はあるが画像が全部消えている」「画像はあるが記事が数か月前」という状態になります。どちらも、お客様に説明できる状態ではありません。

「戻せる」を確かめる 3 つの問い

1. 何分で戻せるか

手順書があるかではなく、実際に測ったことがあるかです。

復旧には、バックアップの取得場所へのアクセス、転送、展開、データベースの投入、URL やパスの書き換え、動作確認が含まれます。書庫が数 GB あれば転送だけで時間が溶けますし、保管先の認証情報が誰も分からない、ということも起こります。

復旧手順は、試していなければ手順ではありません。

2. どの時点に戻せるか

日次バックアップであれば、最悪の場合24 時間分が失われます。これはコーポレートサイトなら許容できることが多い一方、問い合わせフォームが主要な導線になっているサイトでは、失うのは記事ではなくお客様からの連絡です。

「何日分の世代を保持しているか」も同じくらい重要です。改ざんや設定ミスは、当日中に気づくとは限りません。1 週間後に気づいたときに、1 週間前の状態が残っていなければ、バックアップはあっても使えません。

3. 戻した後に、動くか

戻す作業が完了することと、戻したサイトが正しく動くことは別です。よくあるのは次のような食い違いです。

  • データベースの中に、旧環境の URL やサーバー上のパスがそのまま残っている
  • PHP のバージョンが当時と違い、古いプラグインが動かない
  • 有料プラグインのライセンスが、戻した環境では認証されない
  • フォームからのメールが送られない(送信の設定はサーバー側にあり、バックアップに含まれない)

最後の 1 つは特に見落とされます。サイトは表示されるのに、問い合わせだけが届かない状態は、復旧したつもりの後に起こりうる最も厄介な形です。

バックアップそのものが、リスクになるとき

ここはあまり語られませんが、実務では無視できない論点です。

公開されている場所に置かれた控え

引き継いだサイトを外側から調べると、誰でもダウンロードできる場所にデータベースのダンプが置かれていることがあります。移行作業やプラグインの操作で作られたものが、そのまま残っている形です。

データベースのダンプには、利用者のメールアドレスとパスワードのハッシュ、問い合わせの内容、場合によってはデータベースの接続情報まで含まれます。バックアップは、サイトの中身がひとまとめになったファイルです。置き場所を間違えれば、それ自体が情報漏洩の経路になります。

ファイル名を推測されにくくしても、対策にはなりません。多くの場合、作成時のログや設定ファイルが同じ場所に残っており、そこから辿れます。公開領域には置かない、これだけです。

本番と同じ場所にしかない控え

同じサーバーの中にバックアップを置いているだけの構成は、サーバーそのものが失われる事態に対応できません。ディスク障害、アカウントの停止、そして侵入されたときの意図的な削除。バックアップを消してから本番を壊すのは、身代金要求型の攻撃では基本の手順です。

最低でも 1 世代は、本番とは別の場所・別の認証情報で保管されている必要があります。

消えない控えが溜まっていく

プラグインが作るバックアップは、アップロード先のフォルダに置かれることが多く、世代管理から外れて溜まり続けます。数 GB 単位でディスクを圧迫し、しかもそれ自体が公開領域に近い場所にあります。

「バックアップが増えるのは安全」ではありません。管理されていない控えは、資産ではなく負債です。

控えが取れなければ、更新しない

ここまでの話を、運用の設計にどう落とすか。CloudHonu での実例を 1 つ挙げます。

2026 年 8 月、自動更新が失敗した実行は 3 件ありました。3 件とも、原因は同じです。バックアップの作成に失敗したため、更新を実行せずに停止した。プラグインもテーマも、1 件も更新されていません。

これは障害ではなく、設計どおりの動作です。更新は、失敗したときに戻せることが前提の作業です。戻せない状態で当てるくらいなら、当てないほうがよい。控えが取れないこと自体が、更新を止める理由になります。

逆に言えば、この 3 件は「バックアップが取れていないサイトが 2 つある」という報告でもあります。更新が止まったことよりも、そちらのほうが重要な情報です。バックアップの失敗は、それ単体で対応すべき事象として扱う必要があります。

まとめ

バックアップについて確認すべきことは、「取っているか」ではありません。

  1. 出力の中身を確かめているか(成功の記録ではなく、ファイルそのものを)
  2. ファイルとデータベースの両方が揃っているか
  3. 実際に戻したことがあるか(何分かかり、どの時点に戻り、戻した後に動いたか)
  4. 置き場所は安全か(公開領域にない、本番とは別の場所にもある、溜まり続けていない)

この 4 つのうち、3 番目だけが「戻せる」を証明します。残りは「取れている」の話です。試したことのない復旧手順は、まだ手順ではありません。

CloudHonu サポート
オンライン|お気軽にご相談ください