WordPress のサイトは、データベースとファイルの 2 つでできています。どちらか一方だけを保存していても、元どおりには戻せません。更新の失敗やサーバーの障害、不正なアクセスに備えて、両方を定期的にバックアップし、実際に戻せることを確かめておきます。
何をバックアップするか
データベース (MySQL や MariaDB) には、次のものが入っています。
- 投稿、固定ページ、コメント
- サイトの設定、ウィジェット、メニュー
- ユーザーの情報、プラグインの設定
ファイルとして置かれているのは、次のものです。
wp-content/uploads: アップロードした画像などのメディアwp-content/themesとwp-content/plugins: テーマとプラグイン (手を加えたものは、ほかでは手に入らない)wp-config.php: データベースの接続情報や、認証に使う鍵 (ソルト).htaccess: パーマリンクなどの設定
アップロードした画像は、データベースではなくファイルとして保存されています。データベースにあるのは、画像のファイル名や説明などの情報だけです。データベースだけを保存していると、復元したときに画像が表示されません。
WordPress 本体のファイルは、同じ版をあとから入手できるので、必須ではありません。ただし、版の番号は控えておきます。
データベースを書き出す
mysqldump を使う
サーバーでコマンドが使えるなら、MySQL に付いている mysqldump で、データベースを SQL のファイルに書き出せます。接続先の名前やユーザー名は、wp-config.php の DB_NAME、DB_USER、DB_HOST で確かめられます。
# データベースを SQL のファイルに書き出して圧縮する (パスワードは聞かれてから入力する)
mysqldump --single-transaction --default-character-set=utf8mb4 \
-h localhost -u wp_user -p wp_database | gzip > wp-db-$(date +%Y%m%d).sql.gz
--single-transactionは、InnoDB のテーブルを、書き出しの間もロックせずに、ある時点の状態にそろえて書き出す指定です--default-character-set=utf8mb4は、文字コードの指定です。今の WordPress の環境は、絵文字なども保存できる utf8mb4 が多くなっています- パスワードを
-pの直後に書くと、同じサーバーのほかの利用者からコマンドの内容が見えることがあるので避けます - 権限の設定によっては、
--no-tablespacesを付けないとエラーで止まることがあります
WP-CLI を使う
WP-CLI (WordPress をコマンドで操作するツール) が使えるなら、wp-config.php の接続情報をそのまま使って書き出せます。内部で mysqldump などのコマンドを呼び出す仕組みです。
# WordPress のフォルダーで実行する
wp db export wp-db-$(date +%Y%m%d).sql
# 本体の版を控えておく
wp core version
管理画面や phpMyAdmin を使う
コマンドが使えないときは、レンタルサーバーの管理画面のバックアップ機能や、phpMyAdmin の「エクスポート」で SQL のファイルとして書き出せます。バックアップ用のプラグインを使う方法もあります。データベースが大きいと、途中で時間切れになったり、復元のときにアップロードの上限に引っかかったりするので、テーブルを分けて書き出すなどの工夫が要ることがあります。
ファイルをまとめる
ファイルは、wp-content と設定のファイルをまとめて保存します。
# WordPress のフォルダーで、設定とコンテンツをまとめて圧縮する
tar czf wp-files-$(date +%Y%m%d).tar.gz wp-config.php .htaccess wp-content
FTP でダウンロードする場合は、.htaccess のように . で始まる隠しファイルを取りこぼしやすいので、FTP のソフトウェアの設定で表示させておきます。
保管と復元の確認
バックアップは、取り方より、どう保管して、本当に戻せるかのほうが大切です。
- 更新の前に取る: WordPress 本体、テーマ、プラグインを更新する前に、そのつど取る
- 別の場所に保管する: 同じサーバーにだけ置くと、サーバーの障害や乗っ取りで一緒に失う。手元や別のストレージにも置き、何世代か残しておく
- 公開フォルダーに置かない: バックアップには、ユーザーのメールアドレスやパスワードのハッシュ、データベースの接続情報が含まれる。ドキュメントルートの中に置くと、URL を推測されただけでダウンロードされてしまう
- 復元を試す: 手元の開発環境などで、実際に戻してみる
データベースの復元は、次のように行います。
# WP-CLI で読み込む
wp db import wp-db-20261116.sql
# mysql コマンドで、圧縮したファイルを読み込む
gunzip -c wp-db-20261116.sql.gz | mysql --default-character-set=utf8mb4 -u wp_user -p wp_database
試しに戻す環境の URL が本番と違うときは、wp search-replace で、データベースの中の URL を書き換えます。PHP のシリアライズ (配列などを文字列にしたもの) で保存された値も、壊さずに書き換えられます。先に --dry-run を付けて、書き換わる件数を確かめてから実行します。
wp search-replace 'https://example.com' 'https://staging.example.com' --dry-run
まとめ
- バックアップには、データベースとファイル (
wp-content、wp-config.php、.htaccess) の両方が要る - データベースは、
mysqldump、wp db export、管理画面や phpMyAdmin のエクスポートで書き出す - 更新の前に取り、別の場所に何世代か保管する。公開フォルダーには置かない
- 手元の環境で実際に戻してみて、復元できることを確かめておく