バックアップ・リカバリ

バックアップ戦略、PITR、リストア手順

バックアップはデータ保護の最後の砦。定期的なバックアップリストアテストオフサイト保管が重要です。 「バックアップは取っていたがリストアできなかった」は最悪のシナリオ。

バックアップの種類

論理バックアップ

SQL文やデータのダンプ形式。可読性があり、異なるバージョン間で移行可能。 大規模DBでは時間がかかる。

例: pg_dump, mysqldump, mongodump

物理バックアップ

データファイルをそのままコピー。高速で大規模DBに適する。 同一バージョン・プラットフォームでのリストアが基本。

例: pg_basebackup, xtrabackup, ファイルシステムスナップショット

増分・差分バックアップ

変更されたデータのみをバックアップ。ストレージ節約、バックアップ時間短縮。 リストア時は複数のバックアップを組み合わせる必要あり。

PostgreSQL バックアップ

1# 論理バックアップ(pg_dump)
2pg_dump -h localhost -U postgres -d mydb > mydb.sql
3pg_dump -h localhost -U postgres -d mydb -Fc > mydb.dump # カスタム形式(推奨)
4
5# 全データベース
6pg_dumpall -h localhost -U postgres > all_dbs.sql
7
8# 物理バックアップ(pg_basebackup)
9pg_basebackup -h localhost -U replicator -D /backup/base -Ft -z -P
10
11# リストア
12psql -h localhost -U postgres -d mydb < mydb.sql
13pg_restore -h localhost -U postgres -d mydb mydb.dump
14
15# 並列リストア(高速化)
16pg_restore -h localhost -U postgres -d mydb -j 4 mydb.dump

MySQL バックアップ

1# 論理バックアップ(mysqldump)
2mysqldump -h localhost -u root -p mydb > mydb.sql
3mysqldump -h localhost -u root -p --all-databases > all_dbs.sql
4mysqldump -h localhost -u root -p --single-transaction mydb > mydb.sql # InnoDB推奨
5
6# 物理バックアップ(xtrabackup)
7xtrabackup --backup --target-dir=/backup/base
8xtrabackup --prepare --target-dir=/backup/base
9xtrabackup --copy-back --target-dir=/backup/base
10
11# 増分バックアップ
12xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base
13
14# リストア
15mysql -h localhost -u root -p mydb < mydb.sql

PITR(Point-in-Time Recovery)

PITRは任意の時点にデータベースを復元する機能。 フルバックアップ + トランザクションログ(WAL/Binlog)を組み合わせる。

PITRの仕組み

ベースバックアップ
月曜 00:00
+
WAL/Binlog
月曜〜水曜
=
水曜 14:30 の状態
に復元
PostgreSQL PITR設定
bash
1# postgresql.conf
2archive_mode = on
3archive_command = 'cp %p /archive/%f'
4# または S3/GCSにアーカイブ
5# archive_command = 'aws s3 cp %p s3://bucket/wal/%f'
6
7# リカバリ(recovery.conf / postgresql.auto.conf)
8restore_command = 'cp /archive/%f %p'
9recovery_target_time = '2024-01-15 14:30:00'
10recovery_target_action = 'promote'

バックアップ戦略

3-2-1 ルール

  • 3つのコピーを保持
  • 2種類の異なるメディア
  • 1つはオフサイト(別リージョン/別クラウド)

保持期間の例

  • • 日次バックアップ: 7日間保持
  • • 週次バックアップ: 4週間保持
  • • 月次バックアップ: 12ヶ月保持
  • • WAL/Binlog: 最低7日間(PITR用)

リストアテスト

テストしていないバックアップは無いのと同じ。定期的にリストアテストを実施し、手順を確認・更新する。

テスト項目
  • • バックアップファイルの整合性確認
  • • リストア手順の実行と所要時間測定
  • • リストア後のデータ検証
  • • PITRによる任意時点への復元
自動化
  • • CIパイプラインでのリストアテスト
  • • テスト環境への定期リストア
  • • リストア完了の自動通知

SRE/インフラ観点

監視項目

  • • バックアップジョブの成功/失敗
  • • バックアップファイルサイズの推移
  • • バックアップ所要時間
  • • WAL/Binlogアーカイブの遅延

クラウドサービス

  • • AWS RDS: 自動バックアップ、スナップショット
  • • Cloud SQL: 自動バックアップ、PITR
  • • Aurora: 継続的バックアップ、バックトラック

障害シナリオ

  • • 誤操作(DROP TABLE)→ PITR
  • • ディスク障害 → レプリカフェイルオーバー
  • • リージョン障害 → クロスリージョンリストア
  • • ランサムウェア → オフラインバックアップ