MySQL エラ:1017 Can’t find file: ‘%s’ (errno: %d) (806)

検討

もしこんなエラが現れた:ERROR 1017 (HY000): Can’t find file: ‘./test/test.frm’ (errno: 13), or ERROR 1017 (HY000): Can’t find file: ‘./test/test.frm’ (errno: 2),まずはOSエラdaunt (errno) と perrorツールを考えてください。そのツールはMySQLから提供し、binパスに位置する。前に提供したエラ番号で、コマンド行から以下の情報が現れる:

$ perror 13

OS error code 13: Permission denied

$ perror 2

OS error code 2: No such file or directory

 

MySQLがテーブルファイルをアクセスできないあるいはこれらのファイルを見つけ出したらエラになる。

 

解決策

まずはエラ情報に言ったファイルをチェックする。(例えば, ‘./test/test.frm’) データファイルパスにあるか否か。もしあるなら、テーブルファイルとMySQL datadirが運用されて、mysqldのユーザーが持っていることを確保してください (ディフォルトはmysql:mysql)。MySQLサーバがこれらのファイルとMySQL datadirに対して、読み書き権限が持っていることを確保してください。そして、すべてのディレクトリの権限をチェックしてください。

 

オペレーションシステムで、大文字に敏感なシステムから(例えばMS Windows)大文字に敏感ではないファイルシステムのオペレーションシステム(大体はUnixに基づくシステムである)に転移して、正確な文字でテーブルを使うことを確保してください。例えば、Windowsで運用するMySQLサーバはディフォルトはlower_case_tables_names=1、これはテーブルは小文字でディスクに格納されていることと意味する。そして、MySQLは格納や検索するときにテーブル名前を小文字に転換するから、例えばWindowsサーバでTESTという名前のMyISAMテーブルを作成して、MySQLはテーブルのために、test.frm, test.MYI, and test.MYDという名前のファイルを作成する。’TEST’でこのテーブルを利用すれば、MySQLはそれを’test’に変更する。もし、データベースごとにLinuxサーバへ転換すれば、MySQLがそれを’test’に変更したから、TESTじゃなく、testでこのテーブルを利用する必要がある。MySQLサーバはLinuxシステムでlower_case_tables_names=0のときに運用されるから。

Comment

*

沪ICP备14014813号

沪公网安备 31010802001379号