2026年5月20日
2026年5月20日
WordPressのデータベースをバックアップする方法
はじめに
WordPressサイトの障害・ハッキング・誤操作に備えて定期的なバックアップは必須です。データベースにはすべての記事・設定・ユーザー情報が含まれます。複数の手段でバックアップを取り、リモートストレージに保存することで確実なデータ保護が実現できます。
症状・原因
- 更新作業後にサイトが壊れてバックアップから復元したい
- データベースのバックアップを自動化したい
- バックアップをサーバー以外の場所に保存したい
- バックアップが正常に取れているか確認する方法が分からない
解決手順
ステップ1:mysqldumpで手動バックアップする
# wp-config.php からDB接続情報を確認
grep -E "DB_NAME|DB_USER|DB_PASSWORD|DB_HOST" /var/www/html/wp-config.php
# mysqldump でバックアップ(圧縮あり)
mysqldump \
--host=localhost \
--user=wp_user \
--password=wp_password \
--single-transaction \
--routines \
--triggers \
wp_database | gzip > /backups/wp_db_$(date +%Y%m%d_%H%M%S).sql.gz
# バックアップの確認
ls -lh /backups/wp_db_*.sql.gz
zcat /backups/wp_db_20240115_120000.sql.gz | head -50
ステップ2:WP-CLIで自動バックアップする
# WP-CLI でデータベースバックアップ
wp db export /backups/wp_db_$(date +%Y%m%d).sql --allow-root
# 圧縮して保存
wp db export - | gzip > /backups/wp_db_$(date +%Y%m%d_%H%M%S).sql.gz
# バックアップ + 古いファイルの自動削除(7日以上前を削除)
#!/bin/bash
BACKUP_DIR="/backups/wordpress"
DB_FILE="${BACKUP_DIR}/db_$(date +%Y%m%d_%H%M%S).sql.gz"
mkdir -p "$BACKUP_DIR"
wp --path=/var/www/html db export - | gzip > "$DB_FILE"
# 7日以上前のバックアップを削除
find "$BACKUP_DIR" -name "db_*.sql.gz" -mtime +7 -delete
echo "Backup completed: $DB_FILE"
# crontab に登録(毎日深夜2時に実行)
crontab -e
# 以下を追加:
0 2 * * * /bin/bash /home/user/scripts/wp_backup.sh >> /var/log/wp_backup.log 2>&1
ステップ3:UpdraftPlusで自動バックアップする
UpdraftPlus 設定手順(管理画面から):
1. プラグイン → UpdraftPlus インストール・有効化
2. 設定 → UpdraftPlus Backups → 「設定」タブ
バックアップスケジュール:
ファイルバックアップ: 毎日
データベースバックアップ: 毎日
保持する数: 7(7日分保持)
リモートストレージ設定(いずれかを選択):
- Google Drive: GoogleアカウントでOAuth認証
- Dropbox: Dropboxアカウントで連携
- Amazon S3: AWSアクセスキー + バケット名
- FTPサーバー: ホスト・ユーザー名・パスワード・パス
3. 「今すぐバックアップ」で手動バックアップをテスト
4. バックアップファイルをダウンロードして確認
ステップ4:バックアップをS3に自動保存する
#!/bin/bash
# wp_backup_s3.sh: バックアップをS3にアップロード
BACKUP_DIR="/backups/wordpress"
S3_BUCKET="s3://your-backup-bucket/wordpress"
DATE=$(date +%Y%m%d_%H%M%S)
DB_FILE="${BACKUP_DIR}/db_${DATE}.sql.gz"
FILES_FILE="${BACKUP_DIR}/files_${DATE}.tar.gz"
# DBバックアップ
wp --path=/var/www/html db export - | gzip > "$DB_FILE"
# ファイルバックアップ(wp-content のみ)
tar -czf "$FILES_FILE" -C /var/www/html wp-content \
--exclude="wp-content/cache" \
--exclude="wp-content/uploads/cache"
# S3にアップロード
aws s3 cp "$DB_FILE" "${S3_BUCKET}/db/" \
--storage-class STANDARD_IA # 低コストストレージクラス
aws s3 cp "$FILES_FILE" "${S3_BUCKET}/files/"
# ローカルの古いファイルを削除(3日分保持)
find "$BACKUP_DIR" -mtime +3 -delete
# S3の古いファイルを削除(30日分保持)
aws s3 ls "${S3_BUCKET}/db/" | \
awk '{print $4}' | \
sort -r | \
tail -n +31 | \
xargs -I {} aws s3 rm "${S3_BUCKET}/db/{}"
echo "Backup and upload completed: ${DATE}"
ステップ5:バックアップの整合性を確認する
# バックアップファイルの整合性確認
gzip --test /backups/wp_db_20240115.sql.gz && echo "OK" || echo "CORRUPT"
# バックアップからテーブル数を確認
zcat /backups/wp_db_20240115.sql.gz | grep "^CREATE TABLE" | wc -l
# テスト環境で復元確認
mysql --user=test_user --password=test_pass test_database \
< <(zcat /backups/wp_db_20240115.sql.gz)
# WP-CLIで復元テスト
wp --path=/tmp/test_wordpress db import /backups/wp_db_20240115.sql
wp --path=/tmp/test_wordpress post list | head -5
注意事項
- バックアップはサーバーと別の場所に保存してください。サーバーが完全に故障した場合、同じサーバー上のバックアップは使えません
- データベースのバックアップだけでは不十分です。wp-content(画像・プラグイン・テーマ)もバックアップしてください
- バックアップの自動化を設定したら、実際に復元できるかテストしてください。「バックアップが壊れていた」は最悪のシナリオです
まとめ
mysqldump または wp db export でデータベースをgzip圧縮して保存します。cronで毎日自動化し、AWS S3またはGoogle Driveにアップロードしてオフサイトバックアップを実現します。UpdraftPlusはGUI設定で同様の機能を提供します。定期的に gzip --test で整合性を確認し、テスト環境での復元テストを実施します。