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 で整合性を確認し、テスト環境での復元テストを実施します。

お気軽にご相談ください

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