REPAIR TABLE MyISAM テーブルで”Table ‘X’ is Read Only”エラを報告する

この記事で
症状
その理由
ソリューション
リファレンス

適用範囲:
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)

 

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号