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 を付ける

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲