WordPressエラー修正:Table 'wp_options' is marked as crashed and should be repaired

intermediate📝 WordPress2026-06-02| WordPress(全バージョン)、MySQL 5.x/8.x、MariaDB 10.x、Linux/cPanel/Pleskホスティング

Error Message

Table 'wp_options' is marked as crashed and should be repaired
#wordpress#mysql#データベース#修復

エラーの内容

WordPressサイトまたは管理画面を開こうとすると、白紙のページまたは以下のようなデータベースエラーが表示されます:

WordPress database error: Table 'wp_options' is marked as crashed and should be repaired
for query SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'

何も表示されません。トップページも、wp-adminも — 何も。完全なエラーページが表示される場合もあれば、白い画面だけになる場合もあります。いずれにせよ、wp_optionsが読み取れない状態のため、WordPressはコアの設定を読み込めていません。

発生原因

wp_optionsはWordPressの根幹をなすテーブルです。サイトURL、有効化済みプラグイン、テーマ設定、および自動読み込みされるすべての値が格納されています。一般的なサイトでは、このテーブルには500〜2,000行以上のデータがあり、WordPressはページリクエストのたびにすべての行を参照します。

このようなクラッシュは、主に以下の原因で発生します:

  • 書き込み中にサーバーの電源が落ちたり、強制再起動が行われた
  • 書き込み操作中にmysqldプロセスが強制終了された
  • 書き込み中にディスクの空き容量がなくなった
  • テーブルがMyISAMで動作しており、クラッシュ回復機能が一切ない

MyISAMにはクラッシュ回復機能がありません。書き込みが中断されると、インデックスファイルとデータファイルの整合性が崩れます。MySQLはこの不一致を検出し、テーブルをクラッシュ状態としてマークします。

手順1:クラッシュしているテーブルを確認する

wp_optionsだけとは限りません。SSHでログインし、コアテーブルをすべて一度に確認しましょう:

mysql -u your_db_user -p your_database_name

次に以下を実行します:

CHECK TABLE wp_options, wp_posts, wp_postmeta, wp_users, wp_usermeta, wp_terms, wp_term_relationships, wp_term_taxonomy, wp_commentmeta, wp_comments;

Msg_textカラムでcrashedと表示されているものを確認してください。影響を受けているテーブルをすべてメモしておくと、一括で修復できます。

手順2:MySQL CLIでテーブルを修復する(最速の方法)

MySQLシェル内で以下を実行します:

REPAIR TABLE wp_options;

複数のテーブルがクラッシュしている場合は、まとめて修復できます:

REPAIR TABLE wp_options, wp_posts, wp_postmeta;

期待される出力結果:

+--------------------+--------+----------+----------+
| Table              | Op     | Msg_type | Msg_text |
+--------------------+--------+----------+----------+
| yourdb.wp_options  | repair | status   | OK       |
+--------------------+--------+----------+----------+

OKと表示されれば修復成功です。\qでMySQLを終了し、サイトを再読み込みしてください。

手順3:mysqlcheckで修復する(MySQLログイン不要)

MySQLの対話モードに入らずシェルで作業したい場合は、mysqlcheckを直接使用します:

mysqlcheck -u your_db_user -p --repair your_database_name wp_options

WordPressデータベース全体を一括でスキャン・修復するには:

mysqlcheck -u your_db_user -p --auto-repair --check your_database_name

すべてのテーブルをチェックし、壊れているものだけを修復して、正常なものはスキップします。手動での確認は不要です。

手順4:phpMyAdminで修復する(SSHアクセスなしの場合)

SSHが使えない場合も、phpMyAdminで問題なく対応できます:

  • ホスティングのコントロールパネル(cPanel → phpMyAdmin)からphpMyAdminを開く
  • 左サイドバーからWordPressのデータベースを選択する
  • テーブル一覧からwp_optionsを探す — 赤いアイコンや「crashed」のステータスが表示されている場合あり
  • 隣のチェックボックスにチェックを入れる
  • ページ下部のドロップダウンを開き、テーブルを修復するを選択する
  • 実行をクリックする

修復が成功すると確認メッセージが表示されます。

手順5:WP-CLIで修復する(自動化に最適)

WP-CLIを使っている場合は、最もシンプルな方法が利用できます:

wp db repair --path=/var/www/html/your-wordpress-folder

このコマンドはWordPressデータベース全体に対してmysqlcheck --repairを実行します。cronジョブや複数サイトを同一サーバーで管理している場合に最適です。

修復後にデータベースの状態を確認するには:

wp db check --path=/var/www/html/your-wordpress-folder

修復の確認

修復したテーブルに対して簡単なヘルスチェックを実行します:

mysql -u your_db_user -p your_database_name -e "CHECK TABLE wp_options;"

crashedではなくOKと表示されることを確認してください:

+--------------------+-------+----------+----------+
| Table              | Op    | Msg_type | Msg_text |
+--------------------+-------+----------+----------+
| yourdb.wp_options  | check | status   | OK       |
+--------------------+-------+----------+----------+

WordPressサイトとwp-adminを開いてください。正常に戻っていれば完了です。

再発防止策

根本的な解決策は、MyISAMからInnoDBへの変換です。InnoDBはトランザクションログを使用しているため、予期せぬシャットダウン後も自動的にロールバック・復旧が行われます。今回のようなクラッシュは発生しなくなります。

まず、現在テーブルが使用しているエンジンを確認します:

SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_database_name';

wp_optionsのみを変換する場合:

ALTER TABLE wp_options ENGINE = InnoDB;

すべてのMyISAMテーブルを一括変換するシェルのワンライナー:

mysql -u your_db_user -p your_database_name -e \
  "SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' ENGINE=InnoDB;') \
   FROM information_schema.TABLES \
   WHERE TABLE_SCHEMA = 'your_database_name' AND ENGINE = 'MyISAM';" \
  | grep ALTER | mysql -u your_db_user -p your_database_name

MySQL 8.x と MariaDB 10.x では、新規インストール時のデフォルトエンジンはInnoDBです。2015年以前に作成されたデータベース、または古い共有ホスティングから移行したデータベースは、今もMyISAMで動作していることが多くあります。

変換後は、wp db checkをもう一度実行して、すべてが正常であることを確認してください。

Related Error Notes