2026年5月20日

2026年5月20日

WordPressのデータベースエラーを修復する方法

はじめに

「データベース接続エラー」や「テーブルが壊れています」というエラーはWordPressで頻繁に発生するトラブルです。原因はDB接続情報の誤り・サーバー過負荷・テーブルの破損など様々です。エラーの種類に応じた修復手順を解説します。

症状・原因

  • 「データベース接続の確立エラー(Error establishing a database connection)」
  • 管理画面で「テーブルが壊れています。修復が必要です」と表示される
  • 「WordPress データベースエラー: Table 'wp_xxx' doesn't exist」
  • phpMyAdminで「#145 - Table './database/wp_posts' is marked as crashed」

解決手順

ステップ1:接続エラーの原因を特定する

// wp-config.php の接続情報を確認
define('DB_NAME',     'データベース名');
define('DB_USER',     'ユーザー名');
define('DB_PASSWORD', 'パスワード');
define('DB_HOST',     'localhost');  // または IPアドレス

// 接続テスト(一時ファイルを作成してテスト)
// test-db.php をWordPressルートに作成(テスト後は必ず削除)
<?php
// test-db.php(テスト後は必ず削除!)
$conn = mysqli_connect('localhost', 'wp_user', 'wp_password', 'wp_database');
if ($conn) {
    echo 'DB接続成功!';
    mysqli_close($conn);
} else {
    echo 'DB接続失敗: ' . mysqli_connect_error();
}
# コマンドラインでMySQLに接続テスト
mysql -u wp_user -p -h localhost wp_database -e "SELECT 1;"

# MySQLサービスが起動しているか確認
systemctl status mysql   # Ubuntu/Debian
systemctl status mariadb # MariaDB
service mysql status     # 古いシステム

ステップ2:WordPressの組み込み修復機能を使う

// wp-config.php に以下を追加してから
// https://example.com/wp-admin/maint/repair.php にアクセス

define('WP_ALLOW_REPAIR', true);

// 修復完了後は必ず削除!
// define('WP_ALLOW_REPAIR', true);
修復ページの使い方:
1. wp-config.php に define('WP_ALLOW_REPAIR', true); を追加
2. https://your-site.com/wp-admin/maint/repair.php にアクセス
3. 「データベースを修復する」または
   「データベースを修復して最適化する」を選択
4. 修復完了後、wp-config.php から define文を削除

ステップ3:REPAIR TABLE で手動修復する

# WP-CLIで修復
wp db repair

# mysqlcheck コマンドで全テーブル確認・修復
mysqlcheck \
  --host=localhost \
  --user=wp_user \
  --password=wp_password \
  --check \
  --repair \
  wp_database

# 特定テーブルのみ修復
mysqlcheck -u wp_user -p wp_database wp_posts wp_postmeta wp_options

# phpMyAdminの場合:
# 1. データベースを選択
# 2. テーブルを選択(複数可)
# 3. 「テーブルを修復する」を選択
-- MySQLで直接修復する場合
REPAIR TABLE wp_posts;
REPAIR TABLE wp_options;
REPAIR TABLE wp_postmeta;
REPAIR TABLE wp_comments;
REPAIR TABLE wp_commentmeta;
REPAIR TABLE wp_usermeta;
REPAIR TABLE wp_users;
REPAIR TABLE wp_links;
REPAIR TABLE wp_terms;
REPAIR TABLE wp_term_relationships;
REPAIR TABLE wp_term_taxonomy;

-- 全テーブルを確認
CHECK TABLE wp_posts, wp_options, wp_postmeta;

ステップ4:テーブルが存在しない場合の対処

# wp_xxxx テーブルが存在しない場合

# 1. テーブル一覧を確認
wp db query "SHOW TABLES;"

# 2. WordPressのインストールを実行(テーブルを再作成)
wp core install \
  --url=https://example.com \
  --title="サイトタイトル" \
  --admin_user=admin \
  --admin_password=secure_password \
  --admin_email=admin@example.com

# または既存の接頭辞でテーブルを確認
wp db query "SHOW TABLES LIKE 'wp_%';"

# 3. wp-config.php のテーブル接頭辞を確認
grep "table_prefix" /var/www/html/wp-config.php
# $table_prefix = 'wp_'; ← データベースの実際の接頭辞と一致しているか確認

ステップ5:InnoDBの破損を修復する

# InnoDB テーブルの破損(MyISAMより深刻)

# my.cnf に追加して MySQL を再起動(緊急時のみ)
# [mysqld]
# innodb_force_recovery = 1  # 1〜6(6が最強制・データ損失リスクあり)

# /etc/mysql/my.cnf を編集
sudo nano /etc/mysql/my.cnf

# [mysqld] セクションに追加:
# innodb_force_recovery = 1

sudo systemctl restart mysql

# MySQL起動後すぐにバックアップ
mysqldump -u wp_user -p wp_database > /tmp/emergency_backup.sql

# バックアップ取得後、innodb_force_recovery を削除して再起動

注意事項

  • innodb_force_recovery は緊急時のみ使用してください。値を大きくするほど読み取り可能になりますが、データが不完全になるリスクが増します
  • REPAIR TABLE は MyISAM テーブルに有効です。InnoDB テーブルの場合は効果がなく、別途対処が必要です
  • WP_ALLOW_REPAIR は修復後に必ず削除してください。放置すると誰でも修復ページにアクセスできます

まとめ

まず mysql コマンドで接続テストを行い、接続情報の誤りを排除します。テーブル破損には define('WP_ALLOW_REPAIR', true) の組み込み修復機能か mysqlcheck --repair を使います。テーブルが存在しない場合は wp-config.php のテーブル接頭辞とデータベース内の実際の接頭辞が一致しているか確認します。

お気軽にご相談ください

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