2026年7月15日
2026年7月15日
WordPressのデータベースをローカル環境にインポートする方法|WP-CLIとURL置換
本番サイトのデータベースをローカルの開発環境に取り込むと、本番と同じ記事や設定で動作確認ができます。ただし、SQLファイルを読み込むだけでは、サイトのURLが本番のままなので、管理画面に入ろうとすると本番のサイトに転送されてしまいます。この記事では、書き出しから取り込み、URLの置換、ローカルで安全に使うための設定までを順に説明します。WP-CLI 2系、MySQL 8.0/MariaDB 10.6以降を前提にしています(2026年10月時点)。
例では、本番のURLを https://example.com、ローカルのURLを http://localhost:8080 とします。ローカルにはWordPressのファイル(wp-content を含む)を先にコピーしてある前提です。
本番のデータベースを書き出す
本番サーバーにSSHで入れる場合は、WP-CLIで書き出します。
# 本番サーバーの WordPress のディレクトリで実行する
wp db export prod.sql
# 圧縮して書き出す場合(- は標準出力への書き出し)
wp db export - | gzip > prod.sql.gz
SSHが使えない場合は、phpMyAdminの「エクスポート」や、サーバー会社の管理画面のバックアップ機能で、SQLファイルを取得します。
テーブル接頭辞も確認しておきます。ローカルの wp-config.php の $table_prefix を本番と同じにしないと、取り込んだテーブルをWordPressが読みに行きません。
wp config get table_prefix
ローカルにデータベースを作る
ローカルのMySQL/MariaDBに、空のデータベースと専用のユーザーを作ります。DockerやLocalなどの開発ツールを使っている場合は、ツールが作ったデータベースをそのまま使えるので、この手順は不要です。
-- mysql -u root -p でログインしてから実行する
CREATE DATABASE wp_local CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_local_user'@'localhost' IDENTIFIED BY 'ローカル用のパスワード';
GRANT ALL PRIVILEGES ON wp_local.* TO 'wp_local_user'@'localhost';
ローカルの wp-config.php の接続情報を、作ったデータベースに合わせます。ファイルを直接編集しても、WP-CLIで書き換えてもかまいません。
wp config set DB_NAME wp_local
wp config set DB_USER wp_local_user
wp config set DB_PASSWORD 'ローカル用のパスワード'
wp config set DB_HOST localhost
SQLファイルを取り込む
WP-CLIの wp db import は、wp-config.php の接続情報を使ってSQLファイルを読み込みます。
# SQL ファイルを取り込む
wp db import prod.sql
# gzip で圧縮したファイルは、展開しながら標準入力から渡す
gunzip -c prod.sql.gz | wp db import -
WP-CLIを使わない場合は、mysql コマンドで読み込みます。
mysql -u wp_local_user -p wp_local < prod.sql
gunzip -c prod.sql.gz | mysql -u wp_local_user -p wp_local
よくあるエラー
| エラー | 原因と対処 |
|---|---|
Unknown collation: 'utf8mb4_0900_ai_ci' |
MySQL 8.0 で書き出したファイルを、この照合順序を持たないMariaDBに取り込んだ。下のコマンドで照合順序を置き換えてから取り込む |
Got a packet bigger than 'max_allowed_packet' bytes または MySQL server has gone away |
1つの行や1つのINSERT文がサーバーの上限を超えた。ローカルのMySQL設定の [mysqld] に max_allowed_packet=256M を追加して再起動する |
# 照合順序を置き換える(元のファイルは prod.sql.bak として残る)
sed -i.bak 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' prod.sql
URLをローカル用に置き換える
取り込んだ直後は、データベースの中のURLが本番のままです。wp search-replace で置き換えます。このコマンドは、PHPでシリアライズされたデータ(ウィジェットやテーマ設定など)の文字数も合わせて書き換えるので、SQLの REPLACE() で置き換えるより安全です。
まず --dry-run で、どのテーブルで何件変わるかを確認します。
wp search-replace 'https://example.com' 'http://localhost:8080' --all-tables --dry-run
問題がなければ、--dry-run を外して実行します。
wp search-replace 'https://example.com' 'http://localhost:8080' --all-tables --skip-columns=guid --report-changed-only
オプションの意味は次のとおりです。
| オプション | 意味 |
|---|---|
--all-tables |
WordPressに登録されていないテーブルも含め、データベース内のすべてのテーブルを対象にする |
--skip-columns=guid |
投稿の guid 列は変えない。guid はフィードの識別子で、URLとして使われるものではない |
--report-changed-only |
変更があった箇所だけを表示する |
同じデータベースにほかのサイトのテーブルが入っている場合は、--all-tables の代わりに、同じ接頭辞のテーブルだけを対象にする --all-tables-with-prefix を使います。
ブロックの設定やページビルダーのデータでは、URLが https:\/\/example.com のようにスラッシュをエスケープした形で保存されていることがあります。置換後に画像やリンクが本番を向いたままなら、この形でももう一度置き換えます。
wp search-replace 'https:\/\/example.com' 'http:\/\/localhost:8080' --all-tables --dry-run
最後に、サイトのURLが変わったことを確認します。
wp option get home
wp option get siteurl
取り込み後の設定
キャッシュとパーマリンクを更新する
wp cache flush
wp rewrite flush
パーマリンクの設定をし直したい場合は、管理画面の「設定」→「パーマリンク」を開いて「変更を保存」を押す方法でもかまいません。投稿ページが404になる場合は、ローカルのWebサーバーで .htaccess が有効か(Apacheの AllowOverride、mod_rewrite)を確認します。
開発環境であることをWordPressに伝える
WP_ENVIRONMENT_TYPE を local にすると、wp_get_environment_type() が local を返すようになります。対応したプラグインは、これを見て本番向けの処理を止めます。デバッグ表示もあわせて有効にします。
wp config set WP_ENVIRONMENT_TYPE local
wp config set WP_DEBUG true --raw
wp config set WP_DEBUG_LOG true --raw
wp config set WP_DEBUG_DISPLAY true --raw
本番向けの処理を止める
本番のデータには、実在する利用者のメールアドレスや、外部サービスの接続設定が入っています。ローカルで操作したことが本番の利用者や外部サービスに届かないようにします。
- メール送信: MailpitやMailHogのようなメールを受け止めるツールにSMTPの送信先を向けるか、送信用のプラグインを無効にする
- 決済・外部連携: WooCommerceの決済、メール配信サービス、SNS連携などのプラグインは、テストモードに切り替えるか無効にする
- キャッシュ・セキュリティ系のプラグイン: 本番のドメインを前提にした設定が入っていることが多いので、必要がなければ無効にする
# 例: プラグインを無効にする(スラッグは wp plugin list で確認する)
wp plugin list --status=active
wp plugin deactivate プラグインのスラッグ
管理者のパスワードをローカル用に変える場合は、--skip-email を付けて、本番の管理者に変更通知が送られないようにします。
wp user update admin --user_pass='ローカル用のパスワード' --skip-email
本番の利用者情報が入ったデータベースは、個人情報として扱ってください。共有のパソコンやクラウドの同期フォルダーにSQLファイルを置いたままにせず、作業が終わったら削除します。
phpMyAdminで取り込む場合
ローカルにphpMyAdminがある場合は、対象のデータベースを選び、「インポート」タブでSQLファイルを指定して実行します。gzipで圧縮したファイル(.sql.gz)も、そのまま指定できます。
アップロードできるファイルの大きさは、PHPの upload_max_filesize と post_max_size で制限され、PHPの既定値では upload_max_filesize が2MBです。上限は、インポート画面のファイル選択欄の近くに表示されます。大きなファイルは、上の wp db import か mysql コマンドで取り込むほうが、アップロードの上限やPHPの実行時間の制限を受けません。取り込んだ後のURL置換は、phpMyAdminからではシリアライズされたデータを正しく書き換えられないため、WP-CLIの wp search-replace か、同じ処理をするプラグインを使ってください。
まとめ
- 本番で
wp db exportし、$table_prefixを確認しておく - ローカルにデータベースを作り、
wp config setで接続情報を合わせる wp db import(圧縮ファイルはgunzip -c ... | wp db import -)で取り込む。照合順序のエラーはsedで置き換える- URLは
wp search-replaceで置き換える。--dry-runで確認し、エスケープされた形のURLも確認する WP_ENVIRONMENT_TYPEをlocalにし、メール送信や外部連携を止める。パスワード変更は--skip-emailを付ける
関連記事: