バックアップ・リカバリ
バックアップ戦略、PITR、リストア手順
バックアップはデータ保護の最後の砦。定期的なバックアップ、リストアテスト、オフサイト保管が重要です。 「バックアップは取っていたがリストアできなかった」は最悪のシナリオ。
バックアップの種類
論理バックアップ
SQL文やデータのダンプ形式。可読性があり、異なるバージョン間で移行可能。 大規模DBでは時間がかかる。
例: pg_dump, mysqldump, mongodump
物理バックアップ
データファイルをそのままコピー。高速で大規模DBに適する。 同一バージョン・プラットフォームでのリストアが基本。
例: pg_basebackup, xtrabackup, ファイルシステムスナップショット
増分・差分バックアップ
変更されたデータのみをバックアップ。ストレージ節約、バックアップ時間短縮。 リストア時は複数のバックアップを組み合わせる必要あり。
PostgreSQL バックアップ
1 # 論理バックアップ(pg_dump) 2 pg_dump -h localhost -U postgres -d mydb > mydb.sql 3 pg_dump -h localhost -U postgres -d mydb -Fc > mydb.dump # カスタム形式(推奨) 4 5 # 全データベース 6 pg_dumpall -h localhost -U postgres > all_dbs.sql 7 8 # 物理バックアップ(pg_basebackup) 9 pg_basebackup -h localhost -U replicator -D /backup/base -Ft -z -P 10 11 # リストア 12 psql -h localhost -U postgres -d mydb < mydb.sql 13 pg_restore -h localhost -U postgres -d mydb mydb.dump 14 15 # 並列リストア(高速化) 16 pg_restore -h localhost -U postgres -d mydb -j 4 mydb.dump
MySQL バックアップ
1 # 論理バックアップ(mysqldump) 2 mysqldump -h localhost -u root -p mydb > mydb.sql 3 mysqldump -h localhost -u root -p --all-databases > all_dbs.sql 4 mysqldump -h localhost -u root -p --single-transaction mydb > mydb.sql # InnoDB推奨 5 6 # 物理バックアップ(xtrabackup) 7 xtrabackup --backup --target-dir=/backup/base 8 xtrabackup --prepare --target-dir=/backup/base 9 xtrabackup --copy-back --target-dir=/backup/base 10 11 # 増分バックアップ 12 xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base 13 14 # リストア 15 mysql -h localhost -u root -p mydb < mydb.sql
PITR(Point-in-Time Recovery)
PITRは任意の時点にデータベースを復元する機能。 フルバックアップ + トランザクションログ(WAL/Binlog)を組み合わせる。
PITRの仕組み
ベースバックアップ
月曜 00:00
+月曜 00:00
WAL/Binlog
月曜〜水曜
=月曜〜水曜
水曜 14:30 の状態
に復元
に復元
PostgreSQL PITR設定
bash
1 # postgresql.conf 2 archive_mode = on 3 archive_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) 8 restore_command = 'cp /archive/%f %p' 9 recovery_target_time = '2024-01-15 14:30:00' 10 recovery_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
- • ディスク障害 → レプリカフェイルオーバー
- • リージョン障害 → クロスリージョンリストア
- • ランサムウェア → オフラインバックアップ