MySQLのエラー『エラー126:Index File is Crashed』の解決方法
MySQLで「エラー126:Index file is crashed」メッセージが出る場合、MyISAMストレージエンジンで管理されているテーブルのインデックスファイル(`.MYI`ファイル)が破損している。これはサーバーの異常終了、ハードディスクの不良、または過剰な書き込み負荷などで発生しやすい。
目次
1. エラー内容の例
ERROR 126 (HY000): Index file is crashed and should be repaired2. 発生条件
- MyISAMエンジンを使っているテーブルで発生
- サーバーの強制終了、電源断などで不正終了した
- ディスクの不良で`.MYI`ファイルに破損が発生
- 不正なデータ操作やバグによる影響
3. エンジン確認方法(MyISAMかどうか)
SHOW TABLE STATUS WHERE Name = 'your_table_name';「Engine」列が「MyISAM」であれば対象となる。
4. 修復コマンド(REPAIR TABLE)
最も基本的な修復方法は、REPAIR TABLEコマンドを使用する。
REPAIR TABLE your_table_name;修復が成功すれば、再度操作が可能になる。
5. myisamchkを使った修復(停止中のMySQLに対して)
MySQLが停止している状態で、myisamchkを直接使って修復を行う。
myisamchk -r /var/lib/mysql/your_database/your_table_name.MYI修復オプションの意味:
- -r: 通常の修復
- -o: 再構築モード(より慎重な修復)
- –backup: 修復前にバックアップを作成
6. 念のためのバックアップ
修復操作の前には、以下のようにテーブルのファイルをバックアップしておくことが望ましい。
cp /var/lib/mysql/your_database/your_table_name.* /backup/location/7. 修復の確認
修復後、以下のコマンドでテーブルの整合性を確認できる。
CHECK TABLE your_table_name;8. エンジンをInnoDBに変更する検討
MyISAMはインデックス破損に弱いため、InnoDBに変更することで障害に強くなる。
ALTER TABLE your_table_name ENGINE=InnoDB;InnoDBはトランザクション対応、クラッシュリカバリ機能あり。
9. 自動修復設定の活用(MyISAM限定)
MySQLの設定ファイルに以下を追加すると、起動時に自動で破損を検知して修復できる。
[mysqld]
myisam-recover-options=FORCE,QUICK10. 破損を防ぐための対策
- 不意のシャットダウンを防ぐ(UPSなどの導入)
- MyISAMではなくInnoDBの利用を検討
- 定期的なバックアップとCHECK TABLE
- ディスクのSMARTチェックやファイルシステムの整合性確認
11. myisamchkをスクリプトで一括処理
複数テーブルに対して一括でチェックするスクリプト例:
#!/bin/bash
cd /var/lib/mysql/your_database/
for file in *.MYI; do
myisamchk -r $file
done12. REPAIR TABLEとmyisamchkの違い
- REPAIR TABLE:MySQLサーバーを通して実行するため安全性が高い
- myisamchk:MySQL停止中に直接ファイル操作、詳細な修復が可能
-
前の記事
PostgreSQLでの『Column Does Not Exist』エラーの解決方法 2025.06.04
-
次の記事
MySQLのエラー『Lock Wait Timeout Exceeded』の解決方法 2025.06.06
コメントを書く