ホームページ >データベース >mysql チュートリアル >Datadir の変更後、SHOW TABLES でテーブルがリストされているにもかかわらず、MySQL がそのテーブルを存在しないと報告するのはなぜですか?

Datadir の変更後、SHOW TABLES でテーブルがリストされているにもかかわらず、MySQL がそのテーブルを存在しないと報告するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-06 10:36:121023ブラウズ

Why Does MySQL Report a Table as Non-Existent After Datadir Change, Even Though SHOW TABLES Lists It?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。