近日在工作中遇到了一個問題,發現mysql中的一個表無法正常操作,引起了很大的困擾。
首先在mysql中嘗試執行常規的操作,例如查看表結構、查詢表數據等等。但是很奇怪的是無論執行什么操作都會出現錯誤提示,提示信息為“Table 'xxx' doesn't exist”(其中xxx為表名)。
經過仔細排查,發現該表在庫中確實存在,但是無法操作。接下來我們嘗試使用命令行來查詢該表的真實情況。
mysql>SHOW TABLE STATUS LIKE 'xxx';
發現返回的結果中,該表的data_length 和index_length 都為0,表示該表無數據,也沒有索引。
此時可以用以下命令來修復該表:
mysql>REPAIR TABLE `xxx`;
但是,在執行該命令的時候出現了一個問題——無法修復:
mysql>REPAIR TABLE `xxx`; +-----------+--------+----------+-----------------------------------------+ | Table | Op | Msg_type | Msg_text | +-----------+--------+----------+-----------------------------------------+ | test.xxx | repair | error | Can't find file: './test/xxx.frm' (errno: 13) | | test.xxx | repair | status | Operation failed | +-----------+--------+----------+-----------------------------------------+ 2 rows in set (0.01 sec)
出現了“Can't find file: './test/xxx.frm' (errno: 13)”的錯誤,這告訴我們該表對應的數據文件xxx.frm沒有找到,錯誤碼為13,表示“Permission denied”(權限錯誤)。
經過檢查,發現該數據文件所在的目錄屬于另一個用戶,權限不正確。于是通過修改該目錄和文件的權限,可以順利修復該表,使其可以正常操作。
至此,問題得到了解決。在使用mysql時,我們需要注意避免類似的權限問題,以免遇到操作異常的問題。