2026年6月25日
2026年6月25日
WordPressの特定テーブルだけをエクスポートする方法|mysqldump・WP-CLI・phpMyAdminでの選択エクスポート
WordPressのデータベースから特定のテーブルだけを書き出すには、mysqldump でデータベース名の後ろにテーブル名を並べるか、WP-CLIの wp db export --tables= を使うのが手早い方法です。phpMyAdminでも、エクスポート画面の詳細設定でテーブルを選べます。この記事では、3つの方法の具体的な手順と、行の絞り込み・特定テーブルの除外、そして別のサイトに取り込むときにつまずきやすい「関連テーブル」と「テーブル接頭辞」の問題を解説します。
特定テーブルだけをエクスポートしたい場面
テーブル単位のエクスポートは、次のような場面で役立ちます。
- プラグインを更新する前に、そのプラグインのテーブルだけ控えておきたい
- ステージング環境で作った記事データだけを本番に持っていきたい
- ログ系の大きなテーブルを除いて、バックアップの容量と時間を減らしたい
- 不具合の調査用に、特定のテーブルだけを開発者に渡したい
一方で、サイト全体のバックアップの代わりにはなりません。WordPressのデータは複数のテーブルにまたがって関連しているため、一部だけを戻すと整合性が崩れることがあります。サイトを復旧できる状態を保つ全体バックアップは別に取っておいてください。
事前にテーブル名と接頭辞を確認する
最初に、対象のテーブル名を正確に確認します。WordPressのテーブル名は wp-config.php の $table_prefix で決まる接頭辞から始まり、初期値は wp_ ですが、セキュリティ上の理由などで変更されていることがよくあります。
WP-CLIが使える場合は、次のコマンドでこのサイトのテーブルを一覧できます。
# このWordPressが使っているテーブルを一覧表示
wp db tables
# 接頭辞が同じテーブルをすべて表示(プラグインが作ったテーブルも含む)
wp db tables --all-tables-with-prefix
# ワイルドカードで絞り込む(例: WooCommerce関連)
wp db tables 'wp_woocommerce_*' --all-tables-with-prefix
引数なしの wp db tables はWordPress本体が登録しているテーブルを中心に表示するため、プラグイン独自のテーブルが出てこないことがあります。プラグインのテーブルを探すときは --all-tables-with-prefix を付けます。
MySQLに直接接続して確認する場合は SHOW TABLES LIKE 'wp\_%'; のように実行します。_ はLIKEでは任意の1文字を意味するため、厳密に絞り込むときはバックスラッシュでエスケープします。
方法1:mysqldumpで特定テーブルを書き出す
サーバーにSSHで入れるなら、mysqldump が最も柔軟です。データベース名の後ろに、書き出したいテーブル名をスペース区切りで並べます。
# wp_posts と wp_postmeta だけを書き出す
mysqldump --single-transaction --default-character-set=utf8mb4 \
-u wpuser -p wordpress wp_posts wp_postmeta > posts_export.sql
--single-transaction は、InnoDBのテーブルを、ロックをかけずに一貫した状態で書き出すためのオプションです。稼働中のサイトでも記事の更新を止めずに取得できます。--default-character-set=utf8mb4 は、絵文字などを含むデータの文字化けを防ぐために指定します。
パスワードをコマンドに書かない
-p の直後にパスワードを書くと、シェルの履歴やプロセス一覧に残ります。定期的に実行するなら、接続情報を権限を絞ったファイルにまとめる方法が安全です。
# ~/.my-wp.cnf(chmod 600 で自分だけが読めるようにする)
[client]
user=wpuser
password=your-db-password
# --defaults-extra-file は最初のオプションとして指定する
mysqldump --defaults-extra-file=~/.my-wp.cnf --single-transaction \
wordpress wp_options > options_export.sql
行を絞り込む・構造だけを書き出す
--where を使うと、条件に合う行だけを書き出せます。次の例は、固定ページだけを書き出します。
mysqldump --defaults-extra-file=~/.my-wp.cnf --single-transaction \
--where="post_type='page'" wordpress wp_posts > pages_only.sql
--where は指定したすべてのテーブルに同じ条件を当てはめるため、列の構成が違うテーブルを並べるとエラーになります。条件を変えたいテーブルは、コマンドを分けて実行してください。
テーブルの構造だけが必要なときは --no-data を付けます。開発環境に同じテーブルを作りたいときや、プラグインのテーブル定義を確認したいときに便利です。
特定のテーブルを除外する
「ほぼ全部だが、大きなログテーブルだけ除きたい」場合は、--ignore-table を使います。こちらは データベース名.テーブル名 の形式で、1つのテーブルごとに1回指定します。
mysqldump --defaults-extra-file=~/.my-wp.cnf --single-transaction \
--ignore-table=wordpress.wp_actionscheduler_logs \
--ignore-table=wordpress.wp_my_plugin_logs \
wordpress | gzip > wordpress_without_logs.sql.gz
テーブル名だけを書くと除外されないので注意してください。サイズの大きいデータベースは、gzip で圧縮しながら書き出すとディスクを圧迫しにくくなります。
方法2:WP-CLIで特定テーブルを書き出す
WP-CLIの wp db export は、wp-config.php の接続情報を自動で読み込むため、パスワードを入力せずに実行できます。
# 指定したテーブルだけを書き出す(カンマ区切り)
wp db export posts_export.sql --tables=wp_posts,wp_postmeta,wp_term_relationships
# 指定したテーブルを除外して書き出す
wp db export without_logs.sql --exclude_tables=wp_actionscheduler_logs
# ワイルドカードで抽出したテーブルを書き出す
wp db export woo_export.sql --tables=$(wp db tables 'wp_woocommerce_*' --all-tables-with-prefix --format=csv)
内部では mysqldump を呼び出しているため、サーバーに mysqldump がインストールされている必要があります。mysqldump のオプションを追加で渡すこともでき、たとえば wp db export pages.sql --tables=wp_posts --where="post_type='page'" のように書けます。
方法3:phpMyAdminでテーブルを選んで書き出す
SSHが使えないレンタルサーバーでは、phpMyAdminが現実的な選択肢です。
- 左側の一覧から対象のデータベースを選ぶ
- 上部の「エクスポート」タブを開く
- エクスポート方法で「詳細」を選ぶ
- テーブルの一覧で、書き出したいテーブルだけにチェックを入れる
- 形式が「SQL」になっていることを確認して実行する
詳細設定では、構造だけ・データだけの書き出しや、圧縮形式の指定もできます。大きなテーブルはブラウザー経由だとタイムアウトしやすいので、何度か失敗する場合はテーブルを分けて書き出すか、サーバー会社が提供するバックアップ機能の利用を検討してください。画面の表記はphpMyAdminのバージョンによって異なります(2026年10月現在の一般的な画面に基づく説明です)。
別のサイトに取り込むときの注意点
書き出しより、取り込む側でつまずくことのほうが多くあります。取り込み先のデータベースは、作業前にバックアップを取ってください。
既存のテーブルが上書きされる
mysqldump の出力には、初期設定で DROP TABLE IF EXISTS が含まれます。取り込み先に同じ名前のテーブルがあると、中身は丸ごと置き換わります。記事を「追加」したいつもりで wp_posts を取り込むと、取り込み先にあった記事は消えます。追加したい場合は、テーブル単位の取り込みではなく、WordPressのエクスポート/インポート機能などを使うほうが安全です。
関連するテーブルをそろえる
WordPressのデータは複数のテーブルに分かれています。
- 記事:
wp_postsと、カスタムフィールドなどのwp_postmeta - カテゴリー・タグ:
wp_terms、wp_term_taxonomy、wp_term_relationships - ユーザー:
wp_usersとwp_usermeta
wp_posts だけを持っていくと、カスタムフィールドやカテゴリーの紐付けが失われます。記事の投稿者IDが取り込み先のユーザーと一致しない問題も起こります。
接頭辞が違うと権限情報が読めなくなる
取り込み先の接頭辞が違う場合、テーブル名を変えるだけでは足りません。wp_usermeta の wp_capabilities や、wp_options の wp_user_roles のように、キー名自体に接頭辞が含まれているデータがあるためです。これらを取り込み先の接頭辞に合わせて書き換えないと、ユーザーの権限が認識されず、管理画面に入れなくなることがあります。
URLを含むデータの置き換え
別ドメインのサイトに取り込む場合、記事本文やオプションに古いURLが残ります。wp_options などにはシリアライズされたデータが含まれるため、SQLの文字列置換で書き換えると文字数の情報が壊れます。URLの置き換えは wp search-replace などシリアライズに対応した方法で行ってください。
まとめ
- 特定テーブルの書き出しは、
mysqldump データベース名 テーブル名...かwp db export --tables=が基本です。 --whereで行を絞り込み、--ignore-table(データベース名.テーブル名形式)や--exclude_tablesで不要なテーブルを除外できます。- SSHが使えない環境では、phpMyAdminのエクスポートで「詳細」を選び、テーブルにチェックを入れます。
- 取り込み時は既存テーブルが上書きされるため、取り込み先のバックアップを先に取ります。
- 関連テーブルの組み合わせ、接頭辞を含むキー名、シリアライズされたURLに注意します。