MySQL Tableが存在しない?しかし存在する(はず)
MySQLのdatadirを変更したところ、1つのデータベースを除いてすべてのデータベースが正常に移動しました。データベースへの接続と使用は可能で、SHOW TABLESコマンドでもすべてのテーブルが正しく返され、各テーブルのファイルはMySQL data directoryに存在しています。
しかし、テーブルから何かを選択しようとすると、テーブルが存在しないというエラーメッセージが表示されます。SHOW TABLESステートメントを使用して同じテーブルを表示できたので、これは理にかなっていません。
おそらく、SHOW TABLESはファイルの存在をリストしますが、ファイルが破損しているかどうかは検査しないのではないかと推測しています。したがって、それらのファイルをリストすることはできても、アクセスすることはできません。
とはいえ、単なる推測にすぎません。このようなケースはこれまで目にしたことがありません。現在はデータベースを再起動してテストを行うことができませんが、データベースを使用するその他のすべてのアプリケーションは正常に動作しています。
この現象の理由についてご存知の方はいますか?
例:
mysql> SHOW TABLES; +-----------------------+ | Tables_in_database | +-----------------------+ | TABLE_ONE | | TABLE_TWO | | TABLE_THREE | +-----------------------+ mysql> SELECT * FROM TABLE_ONE; ERROR 1146 (42S02): Table 'database.TABLE_ONE' doesn't exist
解決策:
データベースディレクトリを以下のコマンドを使用して直接コピーした場合、同じ問題が発生することがあります。
cp -r /path/to/my/database /var/lib/mysql/new_database
InnoDBテーブルを使用するデータベースでこの操作を行うと、上記の奇妙な「テーブルが存在しない」というエラーが表示されます。
問題は、MySQL datadirのルートにib*ファイル(例:ibdata1、ib_logfile0、ib_logfile1)が必要なことです。
これらのファイルをコピーしたところ問題なく動作しました。
以上がDatadir の変更後、SHOW TABLES でテーブルがリストされているにもかかわらず、MySQL がそのテーブルを存在しないと報告するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。