Backup and Migrate
Drupalサイトのデータベースやファイルをバックアップし、別の環境にマイグレーションするための包括的なバックアップソリューションを提供するモジュールです。
backup_migrate
インストール
composer require 'drupal/backup_migrate:^5.1'
composer require 'drupal/backup_migrate:^5.0'
概要
Backup and Migrateは、Drupalサイトのバックアップとリストアを簡単に行うための強力なモジュールです。データベース全体のバックアップ、ファイルディレクトリのバックアップ、そしてそれらからのリストアを管理画面から直感的に実行できます。
主な特徴として、クイックバックアップ(ワンクリックバックアップ)、詳細なオプションを指定できる高度なバックアップ、cronを使用したスケジュールバックアップ、複数の保存先(サーバーディレクトリ、ブラウザダウンロード)への対応があります。また、gzip、bzip、zipによる圧縮、defuse/php-encryptionライブラリを使用した暗号化もサポートしています。
バックアップ対象として、デフォルトのDrupalデータベース、公開ファイルディレクトリ、プライベートファイルディレクトリを選択でき、テーブルやファイルパスの除外設定も可能です。キャッシュテーブルやセッションテーブルはデフォルトで除外されます。
Features
- ワンクリックでのクイックバックアップ機能 - バックアップソース、保存先、設定プロファイルを選択するだけで即座にバックアップを実行
- 高度なバックアップオプション - ファイル名、タイムスタンプ形式、圧縮方式、暗号化、サイトオフラインモードなど詳細設定が可能
- スケジュールバックアップ - cronと連携して定期的な自動バックアップを実行。秒、分、時間、日、週単位で頻度を設定可能
- 複数のバックアップソース - デフォルトデータベース、公開ファイル、プライベートファイル、サイト全体(非推奨)から選択
- 柔軟な保存先設定 - サーバー上のディレクトリへの保存、ブラウザへの直接ダウンロード、プライベートファイルディレクトリへの保存
- 圧縮サポート - GZip、BZip、Zip形式での圧縮によりバックアップファイルサイズを削減
- 暗号化サポート - defuse/php-encryptionライブラリによるパスワードベースの暗号化でセキュアなバックアップ
- 設定プロファイル - よく使うバックアップ設定を保存して再利用可能
- テーブル・ファイル除外設定 - 不要なキャッシュテーブルや一時ファイルをバックアップから除外
- バックアップからのリストア機能 - アップロードしたバックアップファイルからデータベースやファイルを復元
- Drushコマンド対応 - コマンドラインからのバックアップ実行、設定確認が可能
- Tokenモジュール連携 - ファイル名にサイトトークンを使用可能
- バックアップ保持数管理 - スケジュールバックアップで古いバックアップを自動削除
Use Cases
日次自動バックアップの設定
1. 「管理 > 環境設定 > 開発 > Backup and Migrate > Schedules」に移動します。2. 「Add Schedule」をクリックして新しいスケジュールを作成します。3. スケジュール名を入力し、「Schedule enabled」をオンにします。4. バックアップソースで「Default Drupal Database」を選択します。5. 保存先で「Private Files Directory」を選択します。6. 頻度を「1 Days」に設定します。7. 保持数に「7」を入力して、最新7日分のバックアップを保持します。8. 保存してcronが正常に動作していることを確認します。これにより、毎日自動的にデータベースバックアップが作成され、7日より古いバックアップは自動削除されます。
本番環境からステージング環境へのデータ移行
1. 本番環境で「クイックバックアップ」画面からデータベースバックアップを作成し、「Download」を選択してローカルに保存します。2. ステージング環境の「Restore」画面でバックアップファイルをアップロードします。3. 「Restore To」で「Default Drupal Database」を選択し、「Restore now」をクリックします。4. リストア完了後、必要に応じてcache rebuildを実行します。これにより、本番環境のデータをステージング環境に簡単にコピーできます。
暗号化された安全なバックアップの作成
1. まずComposerでdefuse/php-encryptionライブラリをインストール: composer require defuse/php-encryption。2. 「Advanced Backup」画面に移動します。3. 「Backup Encryption」セクションで「Encrypt File」にチェックを入れます。4. 強力なパスワードを「Encryption Password」フィールドに入力します。5. その他の設定を行い、「Backup now」をクリックします。生成されるファイルには.ssl拡張子が付加され、パスワードなしでは復号できません。リストア時には同じパスワードが必要です。
特定テーブルを除外したバックアップ
1. 「Settings > Settings Profiles」で新しいプロファイルを作成します。2. 設定プロファイル編集画面で、除外したいテーブル名を入力します。3. 「Exclude these tables entirely」にはバックアップしないテーブルを、「Don't include data from these tables」には構造のみバックアップするテーブルを指定します。4. デフォルトでcache_*テーブル、sessions、watchdog等は構造のみバックアップに設定されています。5. プロファイルを保存し、クイックバックアップ時にこのプロファイルを選択します。
Drushを使った自動バックアップスクリプト
以下のコマンドをcronやCI/CDパイプラインで実行することで、コマンドラインからバックアップを自動化できます。 # デフォルト設定でバックアップ drush bb # 特定のソースと保存先を指定 drush bb --source_id=default_db --destination_id=private_files # 設定プロファイルを使用 drush bb --profile_id=my_profile Drushコマンドは戻り値でバックアップの成功/失敗を判定できるため、スクリプトでのエラーハンドリングが可能です。
Tips
- 本番環境では必ずプライベートファイルディレクトリにバックアップを保存し、直接ダウンロードは避けてください。バックアップファイルにはセンシティブな情報が含まれている可能性があります。
- キャッシュテーブルは自動的にデータ除外されますが、巨大なログテーブル(watchdog等)も除外することでバックアップサイズと時間を削減できます。
- スケジュールバックアップの「Number to keep」を設定して、ディスク容量の圧迫を防いでください。
- 暗号化を使用する場合は、パスワードを安全な場所に保管してください。パスワードを紛失するとバックアップを復元できなくなります。
- 大規模サイトでは「Take site offline」オプションを使用して、バックアップ中のデータ不整合を防いでください。
- Tokenモジュールと組み合わせることで、サイト名を含むファイル名を自動生成できます(例: [site:name]-backup)。
- Drushコマンドを使用すると、CI/CDパイプラインやデプロイスクリプトにバックアップを組み込めます。
Technical Details
Admin Pages 9
/admin/config/development/backup_migrate
ワンクリックでサイトのバックアップを実行できるメイン画面です。バックアップソース、保存先、設定プロファイルを選択してすぐにバックアップを開始できます。
/admin/config/development/backup_migrate/advanced
詳細なオプションを指定してバックアップを実行できます。ファイル名、圧縮、暗号化、テーブル除外などの設定が可能です。
/admin/config/development/backup_migrate/restore
Backup and Migrateで作成したバックアップファイルをアップロードしてサイトをリストアします。
/admin/config/development/backup_migrate/backups
各保存先に保存されているバックアップファイルの一覧を表示します。ファイルのリストア、ダウンロード、削除が可能です。
/admin/config/development/backup_migrate/schedule
cronと連携した定期バックアップのスケジュールを管理します。
/admin/config/development/backup_migrate/schedule/add
新しいバックアップスケジュールを作成します。
/admin/config/development/backup_migrate/settings
再利用可能なバックアップ設定を管理します。
/admin/config/development/backup_migrate/settings/destination
カスタムバックアップ保存先を管理します。サーバー上のディレクトリを追加できます。
/admin/config/development/backup_migrate/settings/source
バックアップ対象のソースを管理します。カスタムソースを追加できます。
権限 4
Hooks 1
hook_backup_migrate_service_object_alter
BackupMigrateサービスオブジェクトをカスタマイズするためのフック。カスタムソース、保存先、フィルターをサービスオブジェクトに追加できます。
Drush Commands 6
drush backup_migrate:quick_backup
クイックバックアップを実行します。対話モードで実行するか、オプションで直接指定できます。
drush backup_migrate:schedule_backup
有効なスケジュールを選択して即座に実行します。
drush backup_migrate:destinations
設定されている保存先の一覧を表示します。
drush backup_migrate:sources
設定されているバックアップソースの一覧を表示します。
drush backup_migrate:profiles
設定されている設定プロファイルの一覧を表示します。
drush backup_migrate:schedules
設定されているスケジュールの一覧を表示します。
Troubleshooting 6
「Entire Site」オプションは現在安定性の問題があり、大規模なサイトでは失敗する可能性が高いです。代わりに「Default Drupal Database」と「Public Files Directory」を別々にバックアップすることを推奨します。この問題は将来のリリースで修正される予定です。
settings.phpで$settings['file_private_path']が正しく設定されていることを確認してください。また、private://backup_migrate/ディレクトリが存在し、Webサーバーが書き込み可能であることを確認してください。ディレクトリが存在しない場合は最初のバックアップ時に自動作成されます。
1. cronが正常に動作しているか確認してください(「レポート > ステータスレポート」でcronの最終実行時刻を確認)。2. スケジュールの「Schedule enabled」がオンになっているか確認してください。3. 設定された頻度がcronの実行間隔より長いか確認してください(cronが1時間ごとに実行される場合、1分ごとのスケジュールは機能しません)。
defuse/php-encryptionライブラリがインストールされていません。以下のコマンドでインストールしてください: composer require defuse/php-encryption。インストール後、キャッシュをクリアしてください。
1. バックアップファイルがBackup and Migrateで作成されたものか確認してください(phpMyAdminなど他のツールで作成されたダンプは使用できません)。2. 暗号化されたファイルの場合は、「Decrypt file」をオンにして正しいパスワードを入力してください。3. ファイルが破損していないか確認してください。
これはバージョン5.1.0で修正された既知の問題です。モジュールを最新バージョンにアップデートしてください。
Security Notes 6
- バックアップファイルにはデータベースの全データ(ユーザー情報、パスワードハッシュ、セッション情報等)が含まれます。必ず安全な場所に保存し、不要になったら削除してください。
- 「perform backup」「restore from backup」「access backup files」権限は信頼できる管理者にのみ付与してください。これらの権限があればサイト全体のデータにアクセスできます。
- プライベートファイルディレクトリのバックアップ保存先が.htaccessで適切に保護されていることを確認してください。
- 暗号化機能を使用する場合でも、強力なパスワードを使用してください。
- バックアップファイルをメールで送信したり、公開アクセス可能な場所に保存しないでください。
- リストア機能は、アップロードされたファイルでデータベース全体を上書きします。悪意のあるファイルをアップロードされないよう、権限管理を厳重に行ってください。