2026年10月14日

2026年10月14日

WP-CLIのwp db exportでWordPressのデータベースを書き出す方法|圧縮・テーブル指定・cron

WP-CLI の wp db export は、WordPress のデータベースを SQL ファイルに書き出すコマンドです。内部では mysqldump(MariaDB では mariadb-dump も可)を呼び出し、接続先・ユーザー名・パスワードは wp-config.php の DB_HOST・DB_NAME・DB_USER・DB_PASSWORD から読み取ります。そのため、パスワードをコマンドに書かずにバックアップを取れます。この記事では、基本の書き出しから、テーブルの指定、圧縮、cron での定期実行までを順に説明します(2026年10月時点の WP-CLI の公式ドキュメントに基づきます)。

使う前に確認すること

  • WP-CLI が使えるか: サーバーに SSH で入り、wp --info を実行します。バージョン情報が表示されれば使えます。レンタルサーバーでは最初から入っていることが多く、無ければ次の手順で入れられます。
  • mysqldump があるか: wp db export は mysqldump または mariadb-dump が無いと「The mysqldump or mariadb-dump binary is not available.」というエラーで止まります。
  • WordPress のディレクトリで実行するか、--path を付けるか: WP-CLI は wp-config.php を探してデータベースの接続情報を得ます。WordPress のディレクトリの外から実行するときは --path=/path/to/wordpress を付けます。

WP-CLI が無い場合の導入手順は公式の手順どおり、Phar ファイルを取得して実行パスに置きます。

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

sudo が使えない共用サーバーでは、ホームディレクトリの下(例: ~/bin/wp)に置き、そのディレクトリを PATH に加えます。

基本の書き出し

WordPress のディレクトリで次のように実行します。

cd /path/to/wordpress
wp db export backup.sql

成功すると「Success: Exported to 'backup.sql'.」と表示されます。ファイル名を省略すると {データベース名}-{年-月-日}-{ランダムな文字列}.sql という名前で、カレントディレクトリに作られます。

# ファイル名を省略(例: wpdb-2026-10-30-1a2b3c4.sql のような名前になる)
wp db export

# 作られたファイル名だけを出力する(スクリプトで扱いやすい)
wp db export --porcelain

wp db dump は wp db export の別名で、同じ動きをします。

テーブルを指定する・除外する

一部のテーブルだけを書き出すときは --tables、特定のテーブルを除くときは --exclude_tables を使います。どちらもカンマ区切りで指定します。テーブル名の接頭辞(既定は wp_)は自分のサイトのものに合わせてください。

# 投稿とコメントのテーブルだけ
wp db export posts.sql --tables=wp_posts,wp_postmeta,wp_comments,wp_commentmeta

# ユーザー情報を除いて書き出す(開発環境に渡すときなど)
wp db export no-users.sql --exclude_tables=wp_users,wp_usermeta

# 接頭辞が付いたテーブルだけをまとめて指定する
wp db export prefix-only.sql --tables=$(wp db tables --all-tables-with-prefix --format=csv)

最後の例は、同じデータベースに WordPress 以外のテーブルや別サイトのテーブルが同居しているときに便利です。wp db tables は WordPress が登録しているテーブル名の一覧を出すコマンドです。

テーブルを選んで書き出すと、関連するデータ(例: 投稿と投稿メタ、ユーザーとユーザーメタ)がそろわないことがあります。復元用のバックアップとしてはデータベース全体を書き出すのが基本です。

mysqldump のオプションを渡す

wp db export が知らないオプションは、そのまま mysqldump に渡されます。よく使うのは次のものです。

# InnoDB のテーブルを、書き込みを止めずに整合性のとれた状態で書き出す
wp db export backup.sql --single-transaction

# 既存のテーブルを消してから作り直す DROP TABLE 文を含める
wp db export backup.sql --add-drop-table

# 特定の投稿だけを、テーブル定義なしで書き出す
wp db export part.sql --no-create-info=true --tables=wp_posts --where="ID in (100,101,102)"

--single-transaction は InnoDB のテーブルに有効なオプションで、MyISAM のテーブルには効きません。現在の WordPress のテーブルは通常 InnoDB です。

なお、WP-CLI は既定で mysqldump に --no-tablespaces を付けます(PROCESS 権限の無いユーザーでエラーにならないようにするため)。表領域の情報も必要な場合だけ --include-tablespaces を付けます。また、サーバーの MySQL 設定ファイル(my.cnf など)は既定では読み込まれません。読み込ませたいときは --defaults を付けます。

圧縮して保存する

ファイル名に - を指定すると、SQL が標準出力に出ます。これを gzip に渡せば、非圧縮のファイルを作らずに圧縮できます。

wp db export - --single-transaction | gzip > backup-$(date +%Y%m%d).sql.gz

書き出したファイルを別のサーバーへ送るときは、scp や rsync を使います。

scp backup-20261030.sql.gz user@backup-host:/backup/wordpress/

保存場所とファイルの扱い

データベースのダンプには、ユーザーのメールアドレスやパスワードのハッシュ、各種設定値が含まれます。次の点に注意してください。

  • 公開ディレクトリに置かない: WordPress のディレクトリ(ドキュメントルート)に置くと、ファイル名を推測されてダウンロードされるおそれがあります。ホームディレクトリの下など、Web から見えない場所に保存します。
  • 権限を絞る: chmod 600 backup.sql.gz のように、所有者だけが読めるようにします。
  • サーバーの外にも置く: 同じサーバーにしか無いバックアップは、サーバー障害で一緒に失われます。

cron で毎日書き出す

cron で動かすときは、wp のフルパスと --path を指定します。cron は通常のログインと環境変数(PATH など)が異なるためです。まず which wp で wp の場所を確認します。

次の例は、毎日午前2時にデータベースを圧縮して書き出し、14日より古いファイルを消すものです。crontab -e で登録します。

0 2 * * * /usr/local/bin/wp db export - --path=/var/www/wordpress --single-transaction --quiet | gzip > /home/user/backup/db-$(date +\%Y\%m\%d).sql.gz && find /home/user/backup -name 'db-*.sql.gz' -mtime +14 -delete

crontab では % が改行の意味になるため、date の書式は \% とエスケープします。一行が長くなる場合や、エラー時の通知を入れたい場合はシェルスクリプトにまとめて、cron からはそのスクリプトを呼び出す形にすると管理しやすくなります。

root の crontab で実行すると WP-CLI が警告を出して止まります。WordPress のファイルの所有者(Web サーバーのユーザーや自分のアカウント)の crontab に登録してください。

書き出したファイルを確認する・戻す

バックアップは戻せることを確かめて初めて役に立ちます。ファイルの中身は次のように確認できます。

# 先頭を確認(圧縮ファイルの場合)
zcat backup-20261030.sql.gz | head -n 30

# CREATE TABLE の数でテーブルがそろっているかを見る
zcat backup-20261030.sql.gz | grep -c 'CREATE TABLE'

復元は wp db import で行います。今のデータベースは上書きされるので、復元の前に現状も書き出しておいてください。

wp db export before-restore.sql
gunzip -c backup-20261030.sql.gz | wp db import -

本番のデータを別のドメインの環境に取り込む場合は、取り込んだ後に wp search-replace で URL を置き換えます。

まとめ

  • wp db export は wp-config.php の接続情報で mysqldump を実行するので、パスワードをコマンドに書かずに済む
  • --tables と --exclude_tables でテーブルを選べる。復元用には全体を書き出す
  • 知らないオプションは mysqldump に渡される。InnoDB では --single-transaction を付ける
  • - で標準出力に出して gzip に渡せば圧縮して保存できる
  • cron では wp のフルパス・--path・\% のエスケープに注意し、保存先は公開ディレクトリの外とサーバーの外にする

関連記事:

お気軽にご相談ください

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