MySQL インストールの datadir を変更したところ、1 つを除いてすべてのベースが正しく移動しました。接続してUSE
データベースにアクセスできSHOW TABLES
、すべてのテーブルも正しく返され、各テーブルのファイルは MySQL データ ディレクトリに存在します。
しかし、テーブルから何かをしようとすると、テーブルが存在しないというエラー メッセージが表示されます。しかし、ステートメントSELECT
を通じて同じテーブルを表示できたので、これは意味がありません。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
ベストアンサー1
万が一、まだ気にしている方がいる場合に備えて:
コマンドを使用してデータベースディレクトリを直接コピーした後も同じ問題が発生しました
cp -r /path/to/my/database /var/lib/mysql/new_database
テーブルを使用するデータベースでこれを行うとInnoDB
、上記で説明した「テーブルが存在しません」という奇妙なエラーが発生します。
問題は、ib*
MySQL データディレクトリのルートにあるファイル (例ibdata1
: 、ib_logfile0
およびib_logfile1
) が必要であることです。
それらをコピーしたらうまくいきました。