この記事で 症状 その理由 ソリューション リファレンス 適用範囲: 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 | +‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+   原因: このトラブルについて可能な原因は二つがある。
  1. MyISAMファイルにMYDかMYIに権限トラブルが起きて、それにmysqldプロセスが上書きできない。
  2. 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)   解決策 可能な原因に対して、解決策は:
  1. MyISAMファイルにMYDかMYIに権限トラブルが起きて、それにmysqldプロセスを上書きできない。リカバリしたいであれば、shellを運用してください:
chgrp ‐R mysql <dataDir> chown ‐R mysql <dataDir> chmod ‐R 660 <dataDir>  
  1. 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)