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 が起動しない、特定のテーブルを読むとエラーになる場合は、次の順で対処します。

  1. 共用サーバーやマネージドのデータベースの場合は、サーバー会社に連絡する。データベースサーバーの設定は利用者が変えられないため、バックアップからの復元を相談します
  2. 自分で管理しているサーバーの場合は、MySQL の設定ファイルの [mysqld] に innodb_force_recovery = 1 を書いて MySQL を起動し直す
  3. 起動できたら、すぐにデータベースをエクスポートする
  4. 新しいデータベース(またはテーブルを削除した後)にエクスポートしたデータを読み込み直し、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_ALLOW_REPAIR の修復画面は誰でも開けるため、作業後に設定を消す
  • WP-CLI では wp db check で検査し、wp db repair で修復する
  • InnoDB は REPAIR TABLE に対応しない。壊れた場合は innodb_force_recovery で起動してエクスポートし、読み込み直すか、バックアップから戻す

お気軽にご相談ください

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