見出し画像

3分間データベース講座 第8回: データベースの守り方~バックアップと障害対策~



登場人物:

  • チャット先生(通称:先生): オブジェクト指向マスター。最近はデータベースの世界にも詳しい。

  • ボット助手(通称:ボット君): プログラミングを始めたばかりの若手。データベースはまだ未知の世界。


ボット君: 先生!この前、作ったアプリがバグって、大事なデータが消えちゃったんです...。どうすればいいんでしょうか?

先生: それは大変だったね、ボット君!でも、そういう「もしも」のためにあるのが、今日のテーマ「バックアップと障害対策」だ。データベースを運用する上で、最も重要なことの一つだよ。

【初級】1. バックアップの種類

先生: バックアップは、予期せぬデータの損失に備えるためのデータの「控え」だ。大きく分けて3つの種類がある。

  1. フルバックアップ:

    • データベース全体のデータを丸ごと保存する。

    • 利点: 復旧が簡単で確実。

    • 欠点: データ量が多いと時間がかかり、ストレージも多く必要になる。

  2. 増分バックアップ(Incremental Backup):

    • 最後のバックアップ(フルまたは増分)から変更された部分だけを保存する。

    • 利点: 時間とストレージを節約できる。

    • 欠点: 復旧に手間がかかる(フルバックアップ+全ての増分バックアップが必要)。

  3. 差分バックアップ(Differential Backup):

    • 最後のフルバックアップから変更された部分だけを保存する。

    • 利点: 復旧が増分バックアップより簡単(フルバックアップ+最新の差分バックアップだけで済む)。

    • 欠点: 回数を重ねると増分バックアップよりデータ量が増える。

【中級】2. データベースの復旧

先生: バックアップは取るだけじゃ意味がない。もしもの時にちゃんと元に戻せるかどうかが重要だ。復旧は、バックアップとトランザクションログを組み合わせて行うのが一般的だ。

ボット君: トランザクションログって、何でしたっけ?

先生: データベースへの変更履歴が記録されているファイルのことだ。PostgreSQLならWAL(Write-Ahead Logging)、OracleならREDOログと呼ばれることが多いね。

先生: バックアップだけでは、バックアップを取得した時点までしか戻せない。しかし、バックアップとトランザクションログを組み合わせることで、ポイントインタイムリカバリという方法で、障害が発生した直前までデータを戻すことができるんだ。ログ単体では過去の状態に戻すことはできないという点を覚えておこう。

【上級】3. 冗長化による可用性の向上

先生: バックアップはあくまで「もしも」の時の備えだが、冗長化は「障害が起きてもサービスを止めない」ための仕組みだ。

ボット君: 冗長化って、サーバーをたくさん用意するってことですか?

先生: その通り!代表的な冗長化の仕組みにレプリケーションがある。

  • レプリケーション(Replication):

    • 複数のデータベースサーバー間でデータを同期させる技術。

    • **プライマリ(Primary)**サーバーでデータが更新されると、**レプリカ(Replica)**サーバーにその変更がコピーされる。

    • これにより、プライマリに障害が起きても、レプリカに処理を切り替えてサービスを継続できる。

    • 注意点:

      • 非同期レプリケーションは、プライマリの更新処理を待たずにデータをコピーするため、読み取り処理の分散に向いているが、障害が発生した際に最新のデータが数秒程度失われるリスクがある。金融取引など厳密なデータ整合性が求められる用途には不向きな場合がある。

      • 同期レプリケーションは、データが完全にコピーされるまで待つため、安全性は高いが、性能に影響がある。

先生: 冗長化はあくまでサービスの継続性を守るためのものだ。データそのものを守るためにはバックアップが不可欠で、両方を組み合わせることが重要だということを忘れないようにしよう。

【実践】4. バックアップの注意点とベストプラクティス

ボット君: バックアップって、いつ取ればいいんですか?

先生: 良い質問だ!データの重要性や更新頻度に合わせて、バックアップ計画を立てることが重要だ。

  • タイミング: 定期的に(例: 毎日、毎週)自動でバックアップを取る仕組みを作ろう。

  • ストレージ: バックアップデータは、別のサーバーやクラウドストレージなど、元のデータベースとは別の場所に保管すること。

  • バックアップとロック: pg_dumpのような論理バックアップはテーブルレベルの共有ロック(読み取りは可能)を取得するため、大規模なデータベースではI/O負荷やキャッシュ効率の低下による性能影響がある。実務では、効率的な物理バックアップ(例: PostgreSQLのpg_basebackup+WALアーカイブ)が採用されることが多い。

  • テスト: バックアップデータから実際に復旧できるか、定期的にテストすること。

5. まとめ

先生: 今日のまとめだ。

  • バックアップ: データ喪失に備え、データの控えを取ること。種類にはフル、増分、差分がある。

  • 復旧: バックアップデータとトランザクションログを組み合わせることで、障害発生直前までデータを復旧できる。

  • 冗長化: 複数のサーバーでデータを同期させ、障害時もサービスを継続できる仕組み。レプリケーションはその典型だ。


次回:第9回: Webとデータベースをつなぐ!~データベース連携の基本~

#データベース #バックアップ #障害対策 #冗長化 #レプリケーション #WAL #トランザクションログ #プログラミング学習


いいなと思ったら応援しよう!

ナオユキ|物語と知識のコンシェルジュ もしこの記事が少しでも役に立ったり、楽しんでいただけたりしたら、チップをいただけるととても嬉しいです! いただいたチップは、今後のより良いコンテンツ制作のための書籍代📚とnote購入🗒️、他の方へのチップ代💰に使わせていただきます。 いつも応援ありがとうございます!