復元できるバックアップがあるかどうかが、面倒な午後で済むか、プロジェクトを失うかの分かれ目です。VPS バックアップの基本ガイドでは考え方を説明しています。こちらは restic と BorgBackup でさらに掘り下げます。どちらも、2 台目のサーバーやオブジェクトストレージへ、暗号化・重複排除したバックアップを作成するツールです。
単純なコピーではなく restic や borg を使う理由
- 重複排除。変更されたデータだけが保存されるため、毎日のスナップショットも小さく保てます。
- 暗号化。データはサーバーを離れる前に暗号化されます。
- スナップショット。過去のどの日の状態にも復元できます。
- 検証。どちらのツールもリポジトリの整合性を確認できます。
どちらか一つを選びます。Restic はシンプルで、SFTP や S3 互換ストレージなど多くのストレージに対応します。Borg は非常に効率的で、borg がインストールされたサーバーへ SSH 経由で動作します。
バックアップの送信先
唯一のバックアップを同じサーバーに保存してはいけません。別のロケーションの 2 台目の VPS、S3 互換のバケット、ストレージボックスを使いましょう。大容量ディスクを備えた小さな VPS は、安価なバックアップ先になります。VPS プランをご覧ください。
Restic:セットアップ
sudo apt install -y restic
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic/myserver"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
長いランダムなパスワードでパスワードファイルを作成し、コピーをオフラインで保管してください。このパスワードがないと、バックアップを復元できません。
restic backup /etc /home /var/www --exclude-caches
restic snapshots
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check
Borg:セットアップ
sudo apt install -y borgbackup
export BORG_REPO="ssh://backup@backup.example.com/srv/borg/myserver"
borg init --encryption=repokey-blake2
borg create --stats --compression zstd ::'{hostname}-{now:%Y-%m-%d}' /etc /home /var/www
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
borg check
borg key export でリポジトリの鍵をエクスポートして保管します。
データベースには注意が必要
稼働中のデータベースのファイルをそのままコピーしないでください。先にダンプを取り、そのダンプをバックアップします:
mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg.sql.gz
スケジュールを設定する
systemd タイマーまたは cron からバックアップを実行します。シンプルな cron の行は次のとおりです:
15 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
失敗したときに通知が届くようにします。たとえば、スクリプトの最後に監視用の ping を送る方法があります。
復元をテストする
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test
ときどき予備のマシンで実際に復元をテストしてください。一度もテストしていないバックアップは、希望的観測にすぎません。