Skip to content

データベース同期(本番→ローカル)

本番環境のデータベースをローカル環境に同期するスクリプトの手順です。安全な実行手順は DB同期の安全ガイド を参照してください。

設定

  1. config/local.env.exampleconfig/local.env にコピーします
bash
cp config/local.env.example config/local.env
  1. config/local.env を編集し、以下の情報を設定します
bash
# 本番環境のデータベース情報
PROD_DB_HOST=your_production_db_host  # 例: mysql16.conoha.ne.jp (ConoHa WING)
PROD_DB_NAME=your_production_db_name
PROD_DB_USER=your_production_db_user
PROD_DB_PASS=your_production_db_pass

# ローカル環境のデータベース情報(Local by Flywheelのデフォルト)
LOCAL_DB_NAME=local
LOCAL_DB_USER=root
LOCAL_DB_PASS=root

注意: config/local.env.gitignore で除外されているため、リポジトリにコミットされません。

実行方法

⚠️ 警告: このスクリプトを実行すると、ローカル環境の既存データベースが本番環境のデータで完全に上書きされます。重要なローカルデータがある場合は、事前にバックアップを取ってください。

bash
# プロジェクトルートから実行
./scripts/sync-db-from-production.sh

スクリプトは以下の処理を自動で実行します:

  1. 設定ファイル (config/local.env) の読み込みと検証
  2. SSH接続の確認
  3. 本番環境からデータベースダンプを取得(SSH経由)
  4. ローカル環境のデータベースにインポート
  5. 一時ファイルの自動削除

セキュリティに関する注意事項

  • パスワード管理:
    • データベース認証情報は config/local.env で管理し、.gitignore で除外されています
    • config/local.env のパーミッションは 600 に設定することを推奨します(chmod 600 config/local.env
    • スクリプトは --defaults-extra-file オプションを使用してパスワードを安全に扱います。パスワードは一時的な設定ファイルに保存され、コマンドライン引数として渡されることはありません
    • 一時的な設定ファイルは自動的に削除されます。ただし、システムクラッシュやkill -9(SIGKILL)などの強制終了の場合は手動で削除してください
  • SSH鍵: SSH鍵のパーミッションは 600 に設定することを推奨します
  • SSH接続: ホスト鍵検証を有効にするため、事前に known_hosts に正しいホスト鍵を登録してください
    • 初回接続時: ssh-keyscan -p <SSH_PORT> <DEPLOY_HOST> >> ~/.ssh/known_hosts でホスト鍵を登録
    • または、UserKnownHostsFile オプションで専用ファイルを使用することも可能
  • 一時ファイル: ダンプファイルとMySQL設定ファイルは、スクリプトが正常終了または通常のシグナル(Ctrl+C等)で中断された場合は自動的に削除されます。ただし、システムクラッシュやkill -9(SIGKILL)などの強制終了の場合は手動で削除してください
    • 一時ファイルの場所:
      • ローカル: /tmp/db-sync-*.sql, /tmp/mysql-*-config-*.cnf, /tmp/mysqldump-error-*.log, /tmp/mysql-error-*.log
      • リモート(本番環境): /tmp/.db-sync-temp-*.cnf

トラブルシューティング

SSH接続エラー

bash
# SSH鍵のパーミッションを確認
ls -l ~/.ssh/your-private-key.pem

# パーミッションを600に設定
chmod 600 ~/.ssh/your-private-key.pem

データベース接続エラー

  • ローカル環境のデータベースが起動しているか確認してください
  • Local by Flywheel を使用している場合、サイトが起動していることを確認してください。加えて、wp を Mac のターミナル(ホスト)で実行すると DB 接続エラーになることがあります。その場合は WP-CLI 接続手順 のとおり、Local のサイトシェルから wp を実行してください
  • データベース名、ユーザー名、パスワードが正しいか確認してください

ダンプファイルが空の場合

  • 本番環境での mysqldump コマンドの実行権限を確認してください
  • 本番環境のデータベース接続情報が正しいか確認してください

関連ドキュメント