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 のテーブル接頭辞とデータベース内の実際の接頭辞が一致しているか確認します。