2026年10月28日

2026年10月28日

WordPressのデータベースのバックアップを取る方法(手動)

はじめに

データベースにはWordPressの投稿・設定・ユーザー情報などすべてのデータが保存されています。ファイルのバックアップと合わせて、定期的なデータベースバックアップが万一の際に唯一の復旧手段になります。

症状・原因

  • データベースのバックアップを一度も取ったことがない
  • 更新作業前にバックアップを取りたい
  • phpMyAdminが使えない環境でバックアップしたい
  • バックアップファイルのサイズが大きすぎてダウンロードできない

解決手順

ステップ1:mysqldump でバックアップする(推奨)

# wp-config.php から認証情報を確認
grep "DB_" /var/www/html/wp-config.php

# 基本的なバックアップ
mysqldump -u wordpress_user -p wordpress_db > backup_$(date +%Y%m%d_%H%M%S).sql

# 推奨オプション付きバックアップ
mysqldump \
    -u wordpress_user \
    -p wordpress_db \
    --single-transaction \
    --routines \
    --triggers \
    --add-drop-table \
    --extended-insert \
    > wp_backup_$(date +%Y%m%d).sql

# 圧縮して保存(ファイルサイズを 70〜80% 削減)
mysqldump -u wordpress_user -p wordpress_db \
    --single-transaction | gzip > wp_backup_$(date +%Y%m%d).sql.gz

# バックアップ確認
ls -lh wp_backup_*.sql.gz
gzip -l wp_backup_*.sql.gz  # 圧縮率を表示

ステップ2:WP-CLI でバックアップする

# WP-CLI を使ったバックアップ(認証情報を自動取得)
wp db export

# ファイル名を指定してエクスポート
wp db export backup_$(date +%Y%m%d).sql

# gzip 圧縮と組み合わせる
wp db export - | gzip > wp_db_$(date +%Y%m%d_%H%M%S).sql.gz

# 特定テーブルのみエクスポート(投稿データのみ等)
wp db export --tables=wp_posts,wp_postmeta posts_backup.sql

# バックアップの内容確認(先頭20行)
wp db export - 2>/dev/null | head -20

# バックアップ後にサイズ確認
wp db export backup.sql && du -sh backup.sql

ステップ3:phpMyAdmin でエクスポートする

phpMyAdmin でのバックアップ手順:

1. phpMyAdmin にログイン
   https://example.com/phpmyadmin/

2. 左ペインから WordPress データベースを選択

3. 上部メニューの「エクスポート」タブをクリック

4. エクスポート方法を選択:
   【クイック】: シンプルな SQL ファイル(小〜中規模サイト向け)
   【カスタム】: 詳細設定可(推奨オプション)

5. カスタム設定の場合:
   - 形式: SQL
   - オブジェクト作成オプション:
     ✅「DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER コマンドを追加する」
     ✅「CREATE TABLE オプション IF NOT EXISTS を追加する」
   - データ:
     ✅「INSERT INTO コマンドを使う」
     ✅「INSERT の最大長」: 50,000

6. 「圧縮」: gzip または zip を選択(ファイルサイズ削減)

7. 「実行」ボタンをクリック → SQL ファイルがダウンロードされる

ステップ4:バックアップファイルを安全な場所に保存する

# バックアップをウェブ公開ディレクトリ外に保存
mkdir -p /home/user/db_backups
chmod 700 /home/user/db_backups

# バックアップを移動
mv wp_backup_*.sql.gz /home/user/db_backups/

# アクセス制限(所有者のみ読み書き可)
chmod 600 /home/user/db_backups/*.sql.gz

# バックアップを複数世代保持(最新7件のみ保持)
ls -t /home/user/db_backups/*.sql.gz | tail -n +8 | xargs rm -f

# リモートに転送(SCP)
scp /home/user/db_backups/wp_backup_$(date +%Y%m%d).sql.gz \
    user@backup-server:/backups/wordpress/

# バックアップの整合性確認
gunzip -t /home/user/db_backups/wp_backup_$(date +%Y%m%d).sql.gz \
    && echo "Backup integrity OK"

ステップ5:バックアップの復元テストを行う

# テスト用データベースにリストア確認
mysql -u root -p -e "CREATE DATABASE wp_test;"
gunzip -c wp_backup_$(date +%Y%m%d).sql.gz | mysql -u root -p wp_test

# リストア後にテーブル数確認
mysql -u root -p wp_test -e "SHOW TABLES;" | wc -l

# 本番と同じテーブル数か確認
mysql -u wordpress_user -p wordpress_db -e "SHOW TABLES;" | wc -l

# テスト用DBを削除
mysql -u root -p -e "DROP DATABASE wp_test;"

注意事項

  • --single-transaction オプションを使うとInnoDBテーブルをロックせずにバックアップできます。MyISAMテーブルには効果がありませんが、InnoDB混在環境でも安全です
  • バックアップファイルにはデータベースの認証情報(ハッシュ化パスワード含む)が含まれます。chmod 600 で所有者のみ読み取り可能に設定してください
  • バックアップをウェブ公開ディレクトリ(/var/www/html/以下)に保存すると外部からダウンロードされる危険があります

まとめ

手動DBバックアップは①mysqldump --single-transaction | gzipで圧縮SQLファイルを生成、②wp db export -とパイプで直接gzip圧縮・特定テーブルのみエクスポートも可能、③phpMyAdminはカスタムモードでDROP TABLEオプションとgzip圧縮を有効化、④バックアップはウェブ公開外ディレクトリにchmod 600で保存・7世代ローテーション、⑤gunzip -c | mysqlで定期的にリストアテストを実施します。

お気軽にご相談ください

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