この記事で
症状
その理由
ソリューション
リファレンス
適用範囲:
MySQLサーババージョン4.0以上
症状:
MyISAMテーブルをリカバリするときに、”Table ‘x’ is read only”エラはどういう意味か、どうやってリカバリできるか。
mysql> repair table t;
+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐+‐‐‐ ‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| Table | Op | Msg_type | Msg_text |
+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| test.t | repair | Error | Table ‘t’ is read only |
| test.t | repair | status | Operation failed |
+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
原因:
このトラブルについて可能な原因は二つがある。
- MyISAMファイルにMYDかMYIに権限トラブルが起きて、それにmysqldプロセスが上書きできない。
- MyISAMを凍結する
MyISAMテーブルが凍結/運用されたかをチェックする
show table status like ‘t’;
もし凍結されたら,Row_format は “Compressed”を映す:
mysql> show table status like ‘t’\G
*************************** 1. row ***************************
Name: t
Engine: MyISAM
Version: 10
Row_format: Compressed <‐‐‐‐‐‐‐‐
Rows: 0
Avg_row_ length: 0
Data_length: 41
Max_data_length: 281474976710655
Index_length: 1024
Data_free: 0
Auto_incremen t: NULL
Create_time: 2013‐0 6‐27 19:29:49
Update_time: 2013‐06‐27 19:29:49
Check_time: NULL
Collation: latin 1_swedish_ci
Checksum: 0
Create_optio ns:
Comment:
1 row in s et (0.02 sec)
解決策
可能な原因に対して、解決策は:
- MyISAMファイルにMYDかMYIに権限トラブルが起きて、それにmysqldプロセスを上書きできない。リカバリしたいであれば、shellを運用してください:
chgrp ‐R mysql <dataDir>
chown ‐R mysql <dataDir>
chmod ‐R 660 <dataDir>
- MyISAMテーブルがが凍結された。リカバリしたいであれば、shellを運用してください:myisamchk.exe ‐‐unpack <dataDir>\<db_name>\<table_name>
Then the table can be repaired:
mysql> flush tables;
Query OK, 0 rows aff ected (0.01 sec)
mysql> repair table t;
+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐+‐‐‐ ‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐+
| Table | Op | Msg_type | Msg_text |
+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐ ‐‐‐‐+
| test.t | repair | status | OK |
+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐+
1 row in set (0.05 sec)
Comment