Appearance
データベース同期(本番→ローカル)
本番環境のデータベースをローカル環境に同期するスクリプトの手順です。安全な実行手順は DB同期の安全ガイド を参照してください。
本番のデータを staging に取り込むときは、別のスクリプト scripts/sync-staging-data-from-production.sh を使う。staging には直近の日別記事・台データ・集計・リンク・ヒートマップのレイアウト・P-WORLD サムネ・有料記事の最新数件とマスタ類だけを入れ、有料記事の購入・会員・コメントなどの個人情報は入れない。手順と対象は ステージング環境デプロイ > 本番データの部分同期 を参照。
本番データをローカルに入れる
本番の差枚・リンク・考察日テーブル、必要なら日別記事の投稿内容をローカルへ取り込むときの正本です。
| やりたいこと | 使うスクリプト | 挙動 |
|---|---|---|
| 初回セットアップ・スキーマ変更後・ローカル破損の復旧 | ./scripts/sync-db-from-production.sh | DB 全体をダンプ→インポート(ローカルを本番で上書き) |
| 有料記事執筆で「足りない月だけ」差枚・サマリ等を足したい | ./scripts/sync-db-month-from-production.sh YYYY-MM | 日付キー業務テーブルのみ REPLACE upsert(DROP しない) |
期間指定で db2023 など業務テーブルだけ取りたい | ./scripts/sync-db-month-from-production.sh --from YYYY-MM-DD --to YYYY-MM-DD | 上記と同じ upsert。両端含む日付範囲 |
| 日別記事の投稿内容(post meta)を一部ローカルへコピーしたい | 上記に --with-daily-article-posts を付ける | 対象期間の daily_article を wp_posts REPLACE + wp_postmeta DELETE/INSERT |
| テーマ・プラグインも揃えたい(ローカル無効プラグインに注意) | ファイル同期ガイド | 本ページの対象外 |
期間差分で同期する業務テーブル(例・接頭辞 wp_): db2023 / db_Link_day / db_Link_month / db_daily_article_kishu_single_day_summary / db_daily_article_kishu_count_delta / db_daily_article_consideration。
--with-daily-article-posts なしでは wp_posts / wp_postmeta は対象外。日別記事の本文相当は post_content ではなく post meta(kousatsu_date / halls / ホール別 *_pre / *_after)である。添付・uploads・コメント・ユーザー・タームは対象外。
有料記事 MCP で充足状況を確認するときは check_local_data_coverage(MCP 利用ガイド)を使う。不足月があれば、ユーザー許可のうえ ensure_local_month_data または月次スクリプトを実行する。任意期間・投稿コピーは CLI を使う(MCP の ensure_local_month_data は YYYY-MM のみ)。エージェントがチャット依頼で同期する手順は .cursor/skills/production-db-sync-to-local/SKILL.md を参照。
いつ DB だけを同期するか(推奨ケース)
ローカルでは本番と異なり 無効化するプラグイン や、開発用に入れたテーマ構成を残したいことが多いです。その場合はテーマ・プラグイン・uploads を触らず、DB のみ取り込むのが安全です。
| やりたいこと | 使うスクリプト |
|---|---|
| 本番相当の記事・差枚・考察データをローカルで見る(全体) | ./scripts/sync-db-from-production.sh |
| 指定月の差枚・サマリ等だけ最新化したい | ./scripts/sync-db-month-from-production.sh YYYY-MM |
| 任意期間の差枚・サマリ等だけ最新化したい | ./scripts/sync-db-month-from-production.sh --from … --to … |
| 期間内の日別記事投稿(meta)も揃えたい | 上記 + --with-daily-article-posts |
| 有料記事 MCP / WP-CLI Tool で最新データに近づけたい | 上記いずれか(用途に応じてフル or 期間差分) |
| テーマ・プラグインも揃えたい(ローカル無効プラグインに注意) | ファイル同期ガイド |
「ローカルを最新化して」と依頼されたエージェントも、特に指定がなければ DB のみを既定とします。執筆中の不足月だけなら 月次/期間差分を優先し、スキーマ変更・初回・破損時はフル同期を使います。プラグイン同期まで含める場合は明示してください。
設定
config/local.env.exampleをconfig/local.envにコピーします
bash
cp config/local.env.example config/local.envconfig/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
# 任意: テーブル接頭辞(未設定時は wp_)
# WP_TABLE_PREFIX=wp_注意: config/local.env は .gitignore で除外されているため、リポジトリにコミットされません。
実行方法(フル同期)
⚠️ 警告: このスクリプトを実行すると、ローカル環境の既存データベースが本番環境のデータで完全に上書きされます。重要なローカルデータがある場合は、事前にバックアップを取ってください。
bash
# プロジェクトルートから実行
./scripts/sync-db-from-production.shスクリプトは以下の処理を自動で実行します:
- 設定ファイル (
config/local.env) の読み込みと検証 - SSH接続の確認
- 本番環境からデータベースダンプを取得(SSH経由)
- ローカル環境のデータベースにインポート
- 一時ファイルの自動削除
実行方法(月次・期間差分同期)
ローカルにスキーマがある前提で、指定月または日付範囲の業務テーブル行だけを本番から upsert します。DB 全体の DROP は行いません。 YYYY-MM と --from / --to は併用できません。
bash
# 対象テーブルと WHERE のみ表示(月指定)
./scripts/sync-db-month-from-production.sh 2026-08 --dry-run
# 実行(確認プロンプトあり)
./scripts/sync-db-month-from-production.sh 2026-08
# 非対話(CI / 自動化向け)
./scripts/sync-db-month-from-production.sh 2026-08 --yes
# 任意期間(両端含む)
./scripts/sync-db-month-from-production.sh --from 2026-08-01 --to 2026-08-15 --dry-run
./scripts/sync-db-month-from-production.sh --from 2026-08-01 --to 2026-08-15
# 期間内の日別記事投稿(posts + postmeta)もコピー
./scripts/sync-db-month-from-production.sh --from 2026-08-01 --to 2026-08-15 --with-daily-article-posts
./scripts/sync-db-month-from-production.sh 2026-08 --with-daily-article-posts --yes- 同時実行は
/tmp/sync-db-month.lock.d(mkdir ロック)でガードします - 破壊的フル同期とコマンド名を分けているため、誤ってフル同期を走らせにくくしています
--with-daily-article-posts時は、同じ ID のローカル日別記事が本番内容で上書きされます(確認プロンプトで警告)- 投稿コピーは業務テーブル upsert のあと、
db_daily_article_considerationとwp_posts(post_type=daily_article)の交差で得たpost_idをキーにします。0 件なら投稿同期はスキップして成功扱いです - 投稿同期の順は「posts / postmeta ダンプ取得 → ローカル postmeta DELETE → インポート」です(ダンプ失敗時に meta だけ欠けるのを防ぐ)
セキュリティに関する注意事項
- パスワード管理:
- データベース認証情報は
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コマンドの実行権限を確認してください - 本番環境のデータベース接続情報が正しいか確認してください
関連ドキュメント
- ローカル環境セットアップ
- DB同期の安全ガイド
- 本番→ローカル ファイル同期ガイド … DB 同期後のテーマ・プラグイン同期(メディア除外の推奨手順を含む)