2026年7月4日
2026年7月4日
WordPressのデータベースを修復する方法|WP_ALLOW_REPAIR・WP-CLI・InnoDBの注意点
WordPress のデータベースは、サーバーの急な停止やディスクの不具合などで、テーブルが壊れることがあります。この記事では、壊れているかどうかの見分け方と、WordPress の修復機能・WP-CLI・phpMyAdmin・mysqlcheck での修復手順、そして多くの WordPress で使われている InnoDB の場合の注意点を説明します(2026年10月時点の MySQL 8.x・MariaDB を前提にしています)。
まず原因を見分ける
画面にエラーが出ても、データベースが壊れているとは限りません。
| 表示・症状 | 主な原因 | 対処 |
|---|---|---|
| 「データベース接続確立エラー」 | wp-config.php の接続情報の誤り、データベースサーバーの停止、接続数の上限 |
接続情報とサーバーの状態を確かめる。テーブルの修復では直らない |
| データベースのテーブルが利用できず、修復が必要かもしれない、という旨のメッセージ | テーブルの破損、テーブルが無い | この記事の修復手順 |
エラーログに Table '...' is marked as crashed and should be repaired |
MyISAM のテーブルの破損 | この記事の修復手順 |
| エラーログに InnoDB の破損を示すメッセージ、MySQL が起動しない | InnoDB のデータファイルの破損 | 後半の「InnoDBのテーブルが壊れた場合」 |
テーブルが「無い」と出る場合は、wp-config.php の $table_prefix(テーブル名の接頭辞、既定は wp_)が実際のテーブル名と合っているかも確かめます。引っ越しの後などに接頭辞が食い違うと、テーブルが無いと判断されます。
修復の前にバックアップを取る
修復の処理でデータが失われることもあるため、作業の前にデータベースを保存します。
wp db export ~/before-repair-$(date +%Y%m%d).sql
WP-CLI が使えない場合は、mysqldump -u ユーザー名 -p データベース名 > before-repair.sql か、phpMyAdmin のエクスポート、またはサーバー会社のバックアップ機能を使います。壊れたテーブルが読めずにエクスポートが失敗する場合は、サーバー会社のバックアップから戻せるかも確認しておきます。
テーブルの種類(ストレージエンジン)を確かめる
修復の方法は、テーブルのストレージエンジンで変わります。
wp db query "SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE();"
- MyISAM(MariaDB の Aria も同様):
REPAIR TABLEで修復できる - InnoDB:
REPAIR TABLEに対応していない。現在の MySQL・MariaDB の既定はこちらで、多くの WordPress のテーブルは InnoDB
方法1:WordPressの修復画面を使う
WordPress には、データベースを修復する画面があります。wp-config.php の「編集が必要なのはここまでです」より上に次の1行を追加します。
<?php
define( 'WP_ALLOW_REPAIR', true );
ブラウザーで https://example.com/wp-admin/maint/repair.php を開くと、修復だけを行うボタン(英語版では「Repair Database」)と、修復と最適化を行うボタン(「Repair and Optimize Database」)が表示されます。まず修復だけのほうを実行し、各テーブルの結果を確かめます。最適化はテーブルを作り直すため、大きなサイトでは時間がかかり、その間はサイトが遅くなることがあります。
この画面は、ログインしていなくても誰でも開けます。作業が終わったら、追加した行を wp-config.php から削除します。
方法2:WP-CLIで確認・修復する
# テーブルを検査する(mysqlcheck --check を実行)
wp db check
# 修復する(mysqlcheck --repair を実行)
wp db repair
# 最適化する(mysqlcheck --optimize を実行)
wp db optimize
いずれも wp-config.php の接続情報を使って mysqlcheck を呼び出すため、サーバーに mysqlcheck コマンドが入っている必要があります。InnoDB のテーブルに wp db repair を実行すると、テーブルごとに「修復に対応していない」という意味のメッセージが出ます。これは InnoDB では修復の操作が無いためで、エラーではありません。
方法3:phpMyAdminやSQLで修復する
phpMyAdmin では、WordPress のデータベースを開いてテーブルにチェックを入れ、一覧の下のメニューから検査(Check table)や修復(Repair table)を選びます。SQL を直接実行する場合は次のとおりです。
CHECK TABLE wp_options;
REPAIR TABLE wp_options;
CHECK TABLE は InnoDB でも使えます。結果の Msg_text が OK なら問題ありません。REPAIR TABLE が使えるのは MyISAM・Aria などのテーブルです。
方法4:mysqlcheckを使う
SSH でサーバーに入れる場合は、mysqlcheck を直接使えます。WordPress のデータベースだけを指定します(--all-databases は、すべてのデータベースに権限があるユーザーでなければ失敗します)。
# 検査だけ
mysqlcheck -u ユーザー名 -p --check データベース名
# 検査して、壊れていたテーブルを修復する
mysqlcheck -u ユーザー名 -p --check --auto-repair データベース名
--auto-repair は、検査で壊れていると分かったテーブルを、すべての検査が終わった後に修復します。
InnoDBのテーブルが壊れた場合
InnoDB は、異常終了しても起動時に自動で回復する仕組みを持っているため、通常は修復の操作が要りません。それでも MySQL が起動しない、特定のテーブルを読むとエラーになる場合は、次の順で対処します。
- 共用サーバーやマネージドのデータベースの場合は、サーバー会社に連絡する。データベースサーバーの設定は利用者が変えられないため、バックアップからの復元を相談します
- 自分で管理しているサーバーの場合は、MySQL の設定ファイルの
[mysqld]にinnodb_force_recovery = 1を書いて MySQL を起動し直す - 起動できたら、すぐにデータベースをエクスポートする
- 新しいデータベース(またはテーブルを削除した後)にエクスポートしたデータを読み込み直し、
innodb_force_recoveryの行を削除して通常どおり起動する
innodb_force_recovery は1から6まであり、数字が大きいほど強い手段になります。1で起動しない場合だけ1つずつ上げます。MySQL のマニュアルでは、4以上ではデータファイルを恒久的に壊すおそれがあると説明されているため、4以上を使う前にデータディレクトリ全体を別の場所にコピーしておきます。復旧できない場合は、バックアップから戻します。
修復した後に確かめること
- サイトの表示、ログイン、記事の編集と保存、コメントの投稿ができるか
wp db checkの結果がすべてOKかWP_ALLOW_REPAIRの行をwp-config.phpから削除したか- 壊れた原因(ディスクの空き容量不足、メモリー不足による MySQL の強制終了など)を、サーバーのログで確かめたか
関連する手順は次の記事も参照してください。
- WP-CLIでWordPressのデータベースを修復する方法|wp db check・repairとInnoDBの対処
- WordPressのデータベースをバックアップする方法
- WordPressのデータベースをWP-CLIでエクスポートする方法
まとめ
- 「データベース接続確立エラー」は多くの場合、接続情報やサーバーの問題で、テーブルの修復では直らない
- 修復の前にバックアップを取り、テーブルのストレージエンジンを確かめる
WP_ALLOW_REPAIRの修復画面は誰でも開けるため、作業後に設定を消す- WP-CLI では
wp db checkで検査し、wp db repairで修復する - InnoDB は
REPAIR TABLEに対応しない。壊れた場合はinnodb_force_recoveryで起動してエクスポートし、読み込み直すか、バックアップから戻す