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で定期的にリストアテストを実施します。