独立系サイトのデータバックアップ:データベース・ファイル・設定のバックアップ戦略と遠隔地保管

独立系サイトで守るべきは「サーバー全体」ではなく、3つの資産です。データベース(取引とコンテンツ)、ファイル(ユーザー投稿とメディア)、設定(コードと環境)。3つはバックアップの頻度も方法もまったく異なり、まとめて取ると必ず問題が起きます。

独立站备份三件套:数据库、文件、配置,各备各的Backup trio: database, files, config — each backed up separately 反直觉:备份成功不算数,能在 4 小时内恢复出来才算数Counter-intuitive: a backup means nothing until it restores in 4h 资产Asset 怎么备How 数据库Database 每天全量+每小时增量Daily full + hourly binlog RPO ≤ 1 小时RPO ≤ 1 hour 文件Files 对象存储异地同步Offsite object storage sync 用户上传件单独备User uploads backed up 配置Config 代码进 Git,配置进版本库Git tracked, secrets in vault 改一次备一次Version every change 3-2-1 原则:3 份副本、2 种介质、1 份异地3-2-1: 3 copies, 2 media, 1 offsite 本地磁盘一份、服务器一份、异地对象存储一份;后两份放在不同机房Local disk + server + offsite bucket in a different region 红线:只在同一台机器上备 = 没备;每季度必须做一次恢复演练Red line: backup on the same box = no backup; drill quarterly 恢复演练从备份恢复到一台新机器,计时,目标 RTO ≤ 4 小时Restore to a fresh box quarterly, target RTO ≤ 4 hours
独立系サイトのデータバックアップ三点セット:データベース・ファイル・設定の頻度と3-2-1の遠隔地保管戦略

独立系サイトのデータバックアップ:データベース・ファイル・設定のバックアップ戦略と遠隔地保管

結論から言うと:独立系サイトで守るべきは「サーバー全体」ではなく、3つの資産です。データベース(取引とコンテンツ)、ファイル(ユーザー投稿とメディア)、設定(コードと環境)。3つはバックアップの頻度も方法もまったく異なり、まとめて取ると必ず問題が起きます。実務では3-2-1の原則で運用します。3つのコピー、2種類の媒体、1つは遠隔地に置き、後の2つは別のデータセンターに保管します。最も重要なのは直感に反する認識です。バックアップの成功は意味がなく、4時間以内にバックアップから完全に復旧できて初めて意味があります。復旧訓練をしていないバックアップは、取っていないのと同じです。

一、なぜ「丸ごと1本取れば済む」わけではないのか

多くのサイト運営者のバックアップ戦略は「毎日サーバー全体を固めて保存する」というものです。聞こえは堅実ですが、実際には3つの問題があります。

第一に、丸ごとのパッケージは大きすぎて、1回のバックアップに何時間もかかり、差分を細かく取れません。第二に、3つの資産の変化頻度は大きく異なります。データベースは毎時変わりますが、ファイルはたまに変わり、設定は数か月動きません。同じ頻度で取ると、無駄になるか足りなくなるかのどちらかです。第三に、丸ごと復旧するとゴミファイルやマルウェアを仕込まれたコードまで一緒に戻り、事故ごと復旧することになります。

ここでの直感に反する判断はこうです。バックアップの価値は「どれだけ取ったか」ではなく、「復旧できるか、どれだけ速く復旧できるか」で決まります。「毎日バックアップしている」サイトを数多く見てきましたが、いざサーバーが落ちた日に、バックアップファイルが壊れている、パスワードが分からない、遠隔地の分は一度も転送に成功していない、といった事態に気づくのです。

バックアップ戦略の合格基準はただ一つです。そのバックアップを新品のマシンに持って行き、4時間以内にサイトを動かせるかどうか。これがサイトのバックアップと復元演習が「復旧可能性の検証」を強調する理由です。

資産の種類 含まれるもの 変化の頻度 取り忘れた場合の結果
データベース 注文・問い合わせ・ユーザー・コンテンツのテーブル 毎時レベル 取引と顧客データの消失
書類 ユーザー投稿・画像・添付・メディア 毎日レベル 添付と商品画像の消失
設定 / コード テーマ・プラグイン・Nginx設定・環境変数 変更のたび 再インストール後に元のサイトを再現できない
丸ごとパッケージ 上記すべてにシステムのゴミを加えたもの 毎日 大きすぎて遅く、復旧時にウイルスも戻る

二、データベースのバックアップ:フルと差分で、RPOを1時間以内に抑える

データベースは3つの資産の中で最も重要で、失ってはいけないものです。戦略は「全量+増分」です。毎日未明に論理フルバックアップ(mysqldumpまたは同等のツール)を1回実行し、binlogを有効にして毎時増分を取ります。これなら最悪でも直近1時間分のデータしか失いません。この指標をRPO(目標復旧時点)と呼びます。

必ず押さえるべき点が2つあります。1つ目は、フルバックアップは業務のピーク時間帯を避け、未明3時から5時に行うこと。2つ目は、バックアップファイルの完全性を検証することです。「ファイルが生成された」だけで安心せず、一時データベースへ復元してサンプル検証してください。そうしないと、ある時点からバックアップファイルが壊れている可能性があります。データベースの容量が大きくなると論理バックアップは遅くなるため、その段階で物理バックアップやクラウドデータベース標準の自動バックアップを検討します。

シナリオ例:午前4時にデータベースの注文テーブルが誤って削除されました。復旧手順は、まず前日未明のフルバックアップを一時データベースへ復元し、次に前日4時以降から事故直前までのbinlogを再生します。これでデータベースは事故の1分前の状態に戻ります。所要時間は約1時間で、損失を最小限に抑えられます。

バックアップ方式 頻度 RPO 適する段階
毎日フル論理バックアップ 1日1回 約24時間 日間アクセス数5000未満
フル+binlog増分 毎日フル、毎時増分 1時間以内 取引がある場合の標準構成
クラウドデータベースの自動バックアップ ベンダー管理 通常5分以内 クラウド移行後の安心な選択
マスタースレーブのリアルタイム同期 リアルタイム ほぼ0 高可用性が必要なときに追加

三、ファイルと設定:分けてバックアップし、データベースバックアップに混ぜない

ファイル(ユーザーがアップロードした問い合わせ添付、製品画像、メディア)は容量が大きく変化が遅いため、毎日のデータベースバックアップに含めるのは不向きです。増分同期ツールを別途使い、アップロードディレクトリを遠隔のオブジェクトストレージへ毎日1回同期すれば十分です。画像や動画のような大きなファイルの管理については、次を参照してくださいメディア資産の管理。

設定とコードは最も見落とされがちです。多くの人はデータベースのバックアップは完璧でも、Nginxの設定、プラグインのバージョン、環境変数がサーバーのあちこちに散らばっていることを忘れています。再インストール後に元の動作を再現できません。

正しい方法は、コードと設定をすべてGitのバージョン管理に入れ、環境変数とシークレットは別途パスワードマネージャーに保存し、Gitには入れないことです。これで設定は「バックアップ」するものではなく、変更のたびにバージョンが残り、いつでも任意の過去の状態に戻せます。

資産 バックアップツール/方式 頻度 遠隔ストレージ
データベース全量 mysqldump自動スクリプト 毎日未明 オブジェクトストレージの別リージョン
データベース増分 binlogアーカイブ 毎時 全量と一緒に遠隔へ
ユーザーアップロードファイル オブジェクトストレージへ増分同期 毎日 直接遠隔ストレージへ書き込み
コードと設定 Gitコミット 変更のたび リモートリポジトリのクラウド
環境変数とシークレット パスワードマネージャー 変更時に即保存 クラウドで暗号化保管

四、遠隔ストレージ:3-2-1原則の実践方法

3-2-1 はバックアップの世界では昔からある原則ですが、ひとり運用のチームは前半だけで終わりがちです。本来の意味はこうです。データを 3 つのコピーで保持し、2 種類の異なる媒体に保存し、そのうち 1 つを別の場所に置く。「別の場所」で大事なのは「別のハードディスク」ではなく、「同じ事故で一緒に失われない場所」だという点です。

これを 1 台のクラウドサーバーで実践すると、こうなります。ローカルディスクに直近のバックアップを 1 つ残し(復旧が最速)、サーバーがあるデータセンターにも 1 つ、さらに別の都市のオブジェクトストレージへ 1 つ転送します。同じアカウント・同じリージョンのブロックストレージのスナップショットは、本当の意味での別の場所とは言えません。データセンターが火事になったり、アカウントがロックされたりすれば、それらは一緒に失われます。別の場所のコピーは最低 30 日保持し、半年ほど前の長期アーカイブを月 1 回残しておけば、ランサムウェアに古いバックアップまで暗号化されるのを防げます。

シナリオ例:サーバーがランサムウェアに暗号化されました。ローカルのバックアップもサーバー上のバックアップも暗号化されましたが、別の都市のオブジェクトストレージにある 30 日前のコピーはオフラインで、暗号化ソフトの手が届きません。このコピーで新しいマシンに復元すれば、失うデータは最大 30 日分で、サイトは残ります。

これが別の場所のコピーの意義です。より速く復旧するためではなく、「すべてのオンラインコピーが失われた」ときに 1 つだけ残るためです。攻撃を受けた後のクリーンアップ手順はこちらサイトが攻撃を受けた後。

コピーの場所 媒体 保持期間 役割
サーバーのローカルディスク クラウドディスク 直近 7 日 日常の高速復旧
同じデータセンターのオブジェクトストレージ オブジェクトストレージ 直近 30 日 サーバー障害時の復旧
別の場所のオブジェクトストレージ 別リージョンのバケット 30 日 + 月次アーカイブ データセンター / アカウント単位の災害
ローカルにダウンロードしたコピー 個人のハードディスク 四半期ごとに 1 つ ベンダーも信頼できないときの最後の砦

5. 落とし穴:バックアップで最もよくある 4 つの偽りの安心

1 つ目の落とし穴は「バックアップが同じマシン上にある」ことです。バックアップファイルをサーバーの別のディレクトリに置いても、サーバーが落ちたり削除されたりすれば、2 つとも一緒に失われます。バックアップはこのマシンの外に出す必要があります。2 つ目の落とし穴は「復元検証を一度もしない」ことです。スクリプトは毎日バックアップ成功と表示していても、実際に復元したことがなければ、半年前から壊れていた可能性が十分あります。

3 つ目の落とし穴は「データだけバックアップして設定をバックアップしない」ことです。データベースは復元できても、使っていたプラグインのバージョンや Nginx の設定を思い出せず、サイトは動きません。4 つ目の落とし穴は「バックアップにアラートがない」ことです。バックアップスクリプトが 3 週間こっそり止まっていても誰も気づかず、復元が必要になった日に空だと分かります。バックアップタスクには失敗アラートを必ず設定し、2 日連続で成功しなければ通知が届くようにしましょう。

偽りの安心 表面的な現象 本当の問題 正しい対処
同じマシンの別ディレクトリにバックアップ 毎日バックアップファイルがある サーバーが落ちればすべて失われる 必ず別の場所に保存する
復元検証を一度もしない バックアップスクリプトは成功と表示 バックアップファイルが壊れている可能性 四半期ごとに復元訓練
データベースだけバックアップ データベースは毎日バックアップ中 設定コードが散在している 設定は Git へ、鍵は金庫へ
バックアップにアラートがない 3週間気づかなかった バックアップが静かに失敗 2日連続失敗でアラート

FAQ よくある質問

自社サイトのバックアップはどのくらいの頻度で取るべき?
資産ごとに決めます。データベースは毎日フルバックアップに毎時のbinlog増分を加え、RPOを1時間以内に抑えます。ユーザーアップロードファイルは毎日1回増分同期。コードと設定は変更のたびにGitへ。すべての資産を同じ頻度で扱ってはいけません。取引のない小規模サイトならデータベースの毎日フルバックアップ1回でも許容できますが、注文や問い合わせが発生した時点で1時間単位が必須になります。
3-2-1原則の「遠隔地」はどのくらい離れていれば遠隔地?
重要なのは物理的な距離ではなく、同じ事故で同時に失われないことです。同じデータセンター内の2台のディスクは遠隔地とは言えず、同じアカウント・同じリージョンのスナップショットも同様です。少なくとも1つのコピーは別都市のオブジェクトストレージに置きます。特に重要なデータなら、さらに個人のハードディスクに四半期ごとの最終手段としてダウンロードし、「ベンダー側でも障害が起きたときに1つ残る」状態にします。
バックアップファイルがあれば十分では?なぜ復旧訓練が必要?
不十分です。バックアップの成功は復旧可能を意味しません。訓練していないバックアップは、復旧時にファイル破損、パスワード忘れ、手順の陳腐化が発覚しがちです。四半期ごとに1回、最新のバックアップを新品のマシンに復旧し、時間を計測します。目標RTOは4時間以内に抑え、超えるなら手順を改善します。ここまでやって初めてバックアップは成立します。
クラウドサーバーベンダーの自動スナップショットで十分?
コピーの1つとしては有効ですが、それだけに頼ってはいけません。ベンダーのスナップショットは同じアカウント・同じリージョンにあり、データセンター規模の障害、アカウントロック、ベンダー障害の際に本番データと一緒に失われます。正しい使い方は、スナップショットを日常の迅速な復旧用の1つとし、データベースとファイルは別途遠隔地のオブジェクトストレージにもう1つ転送することです。2つを分けることで、日常の利便性と災害時の最終手段を同時に満たせます。
ユーザーがアップロードした画像や添付ファイルもデータベースと一緒にバックアップすべき?
一緒にしてはいけません。画像や添付ファイルは容量が大きく変化が遅いため、毎日のデータベースフルバックアップに含めるとバックアップが肥大化し遅くなります。増分同期ツールでアップロードディレクトリを毎日遠隔地のオブジェクトストレージへ同期するだけで十分です。製品画像やメディアファイルの命名、圧縮、再利用はメディア資産ガバナンスと組み合わせ、バックアップ内に重複した大きな画像が溜まらないようにします。
バックアップスクリプトが密かに停止したことをどうやって知る?
バックアップタスクに失敗アラートを設定します。スクリプト実行後に3点を確認します。終了コードが0か、バックアップファイルのサイズが正常か、遠隔地のコピーが実際に転送されたか。いずれかが失敗した場合、または2日連続で新しいバックアップファイルが生成されない場合、普段使うチャネルへ即座に通知します。アラートのないバックアップは、スクリプトが永遠にエラーを起こさないことに安全を賭けているのと同じです。

最後に

データバックアップは自己満足に陥りやすい。スクリプトは動き、ファイルは保存され、見た目は安全だ。しかし本当の検収は復元のその一度だけ。個人運営の独立サイトなら、3種類の資産を分けて備え、3-2-1で遠隔地にコピーを残し、四半期ごとに復元訓練を1回行う。この流れは半日で組み終わり、あとは毎日自動で走らせ、週に一度アラートを確認するだけだ。

実行は3ステップ。第一に、データベースは毎日フルバックアップと毎時増分バックアップを行い、目標RPOは1時間。第二に、ファイルと設定を分け、ファイルは毎日遠隔地のオブジェクトストレージへ同期し、コードと設定はGitで管理する。第三に、四半期ごとに復元訓練を1回行い、4時間以内に収まるか計測し、バックアップタスクには失敗アラートを設定する。

この3ステップを終えれば、サーバー障害に立ち向かう自信は「バックアップが正常であってほしい」から「半日以内に確実に復旧できる」へと変わる。メンテナンスのリズムは次と照らし合わせて公式サイト保守期間一緒に並べよう。

覚えておきたい一言。バックアップとはファイルを複製することではなく、あなたのサイトに「トラブルが起きてもやり直せる」という保険をかけることだ。保険金請求の訓練をしていない保険証券は、紙切れと同じである。

环形山
环形山 クレーター専門家

公式アカウント · 環形山 Crater

環形山(Crater)は、WordPress独立サイト開発+Google SEO+GEO全域成長に特化した海外展開支援会社で、スマートハードウェア、産業機器、SaaS、新エネルギーなどの分野を手がけています。

プロダクト能力方法論ホワイトペーパー業界レポート
965件のシェア
78件のナレッジベース