282

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
4

33 に答える 33

280

誰かがまだ気にかけている場合に備えて:

コマンドを使用してデータベースディレクトリを直接コピーした後、同じ問題が発生しました

cp -r /path/to/my/database /var/lib/mysql/new_database

テーブルを使用するデータベースでこれを行うと、InnoDB上記のクレイジーな「テーブルが存在しません」というエラーが表示されます。

問題は、ib*MySQL datadir のルートにあるファイルが必要なことです(例:ibdata1と)。ib_logfile0ib_logfile1

それらをコピーすると、うまくいきました。

于 2012-07-27T21:46:30.727 に答える
47

Mac OS (MySQL DMG インストール) の場合、MySQL サーバーを再起動するだけで問題が解決しました。冬眠が原因だと思います。

于 2014-02-12T12:38:57.137 に答える
35

使用しているテーブル名の大文字と小文字がオフになっていると、この問題が発生します。したがって、テーブルは「db」と呼ばれますが、selectステートメントで「DB」を使用しました。ケースが同じであることを確認してください。

于 2011-10-13T19:13:14.267 に答える
33

lower_case_table_namesこのエラーは、 に設定し1、その変数のデフォルト値で作成されたテーブルにアクセスしようとしたときにも発生する可能性があります。その場合、以前の値に戻すことができ、テーブルを読み取ることができます。

于 2014-06-17T12:18:30.867 に答える
17
  1. mysqldを停止します
  2. バックアップmysqlフォルダー:cp -a /var/lib/mysql /var/lib/mysql-backup
  3. 古いマシンからデータベースフォルダをコピーします/var/lib/mysql
  4. 古いデータベースからib*(ib_logfile *、ibdata)をオーバーライドします
  5. mysqldを起動します
  6. dabaseをダンプします
  7. mysqldump >dbase.mysql
  8. mysqlサービスを停止します
  9. 削除する/var/lib/mysql
  10. 名前/var/lib/mysql-backupを変更/var/lib/mysql
  11. mysqldを起動します
  12. データベースを作成する
  13. mysqldump < dbase.mysql
于 2012-12-03T00:51:12.307 に答える
16

理由はわかりませんが、私の場合は、外部キーチェックを無効にして有効にするだけで解決しました

SET FOREIGN_KEY_CHECKS=0;
SET FOREIGN_KEY_CHECKS=1;
于 2016-06-29T14:34:24.247 に答える
14

クエリを実行してください:

SELECT 
    i.TABLE_NAME AS table_name, 
    LENGTH(i.TABLE_NAME) AS table_name_length,
    IF(i.TABLE_NAME RLIKE '^[A-Za-z0-9_]+$','YES','NO') AS table_name_is_ascii
FROM
    information_schema.`TABLES` i
WHERE
    i.TABLE_SCHEMA = 'database'

残念ながら、MySQL ではテーブル名に Unicode および非印刷文字を使用できます。ドキュメント/Web サイトから作成コードをコピーしてテーブルを作成した場合、どこかにゼロ幅スペースがある可能性があります。

于 2011-10-13T19:58:59.237 に答える
6

WAMP をアップグレードした後にこの問題が発生しましたが、データベースのバックアップがありませんでした。

これは私のために働いた:

  1. 新しいWAMPを停止

  2. 古い W​​AMP インストールから、必要なデータベース ディレクトリと ibdata1 ファイルをコピーします。

  3. 削除ib_logfile0してib_logfile1

  4. WAMPを開始

これで、データベースのバックアップを作成できるはずです。ただし、サーバーを再起動した後も問題が発生します。WAMP を再インストールし、データベースをインポートします。

于 2016-06-08T15:10:27.680 に答える
6

私にとってうまくいったのは、テーブルが存在しなくても、テーブルを削除することでした。次に、テーブルを再作成し、以前に行った sql ダンプから再作成しました。

テーブル名のメタベースがいくつかあるはずです。ドロップするまで、そこにまだ存在していた可能性が最も高いです。

于 2013-11-19T17:39:12.677 に答える
5

ゴーストテーブルにも同様の問題がありました。ありがたいことに、障害が発生する前の SQL ダンプがありました。

私の場合、次のことを行う必要がありました。

  1. mySQL を停止する
  2. ib* ファイルを/var/mysqlオフからバックアップに移動します
  3. 消去/var/mysql/{dbname}
  4. mySQL を再起動します
  5. 空のデータベースを再作成します
  6. ダンプファイルを復元する

注: ダンプ ファイルが必要です。

于 2013-01-05T16:45:27.483 に答える
2

別のシナリオ (バージョン アップグレード) を次に示します

OS (Mac OS El Captain) を再インストールし、(homebrew を使用して) 新しいバージョンの mysql をインストールしました。インストールされているバージョン (5.7) はたまたま以前のものよりも新しいものでした。次に、ib* ファイルを含むテーブルをコピーし、サーバーを再起動しました。mysql ワークベンチでテーブルを表示できましたが、何かを選択しようとすると、「テーブルが存在しません」というメッセージが表示されました。

解決:

  1. mysqlサーバーを停止します。たとえばmysql.server stop、またはbrew services stop mysql
  2. を使用してサーバーを起動しますmysqld_safe --user=mysql --datadir=/usr/local/var/mysql/(必要に応じてパスを変更します)
  3. 実行mysql_upgrade -u root -p password(別のターミナル ウィンドウで)
  4. 実行中のサーバーをシャットダウンするmysqladmin -u root -p password shutdown
  5. サーバーを通常モードで再起動するmysql.server startか、brew services start mysql

関連するドキュメントはこちらです。

于 2016-05-31T23:34:19.960 に答える
2

この問題は、無効な(破損した?)innodbログファイルで(少なくとも私のものと他のいくつかで)行う必要があるようです。一般的に言えば、それらは単に再作成する必要があります。

以下に解決策を示します。ほとんどの場合、mysql の再起動が必要です。

  • ログ ファイルを再作成します ( mysql を削除して再起動します) 。
  • ログ ファイルのサイズを変更します(MySql 5.6 以降ではファイルが再生成されます)。
  • ある種のデータ移行を行っている場合は、適切なファイルを正しく移行し、他の人がすでに述べているようにアクセス許可を与えていることを確認してください
  • データとログ ファイルの権限を確認してください。mysql が両方の所有者であることを確認してください。
  • 他のすべてが失敗した場合は、データベースを再作成する必要があります
于 2014-07-17T16:22:55.043 に答える
1

テーブル名に隠し文字が含まれている可能性があります。これらは、テーブルを表示しても表示されません。「SHOW CREATE TABLE TABLE_ONE」を実行して「TABLE_ONE」をタブで補完し、隠し文字が含まれているかどうかを確認できますか。また、テーブルを削除して再作成しようとしましたか。特権に問題がないこと、および隠し文字がないことを確認するためです。

于 2011-10-13T19:57:42.360 に答える
1

私のテーブルはどういうわけか先頭にスペース' Customers'がある ie に名前が変更されていました

この意味

a)クエリが壊れた

b)テーブルのアルファベット順で期待される場所にテーブルが表示されませんでした。これは、パニックで表示できないことを意味していました。

RENAME TABLE ` Customer` TO `Customer`;
于 2016-08-26T12:55:42.753 に答える
1

私の場合、それはSQLCA.DBParmパラメーターでした。

使った

SQLCA.DBParm = "Databse = "sle_database.text""

しかし、そうでなければなりません

SQLCA.DBParm = "Database='" +sle_database.text+ "'"

説明:

3 つの文字列を結合します。

 1. Database='              -  "Database='"

 2. (name of the database)  - +sle_database.text+

 3. '                       - "'" (means " ' "  without space)

クォータマークにスペースを使用しないでください。同僚のジャンに感謝します。

于 2013-04-03T13:13:17.707 に答える
1

ここで取り上げる価値があると思うもう1つの答え(同じ問題を抱えてここに来て、これが私にとっての答えであることが判明したため):

クエリ内のテーブル名のスペルがデータベース内のものとまったく同じであることを再確認してください。

明らかな初心者向けのことですが、「ユーザー」と「ユーザー」のようなものは人々をつまずかせる可能性があり、ここのリストにあると役立つ答えになると思いました. :)

于 2014-08-13T18:57:20.420 に答える
0

私も同じ問題を抱えていましたが、隠しキャラクターや「シュレディンガーのテーブル」が原因ではありませんでした。問題 (まさに上記のとおり) は、復元プロセスの後に発生しました。MySQL 管理者バージョン 1.2.16 を使用しています。復元を実行する必要がある場合はORIGINAL、ターゲット スキーマのチェックを外し、ドロップ ボックスからデータベースの名前を選択する必要があります。その後、問題は修正されました。少なくともそれが私のデータベースの理由でした。

于 2012-04-06T00:44:19.643 に答える
0

テーブル名にピリオドがあると失敗します SELECT * FROM poorly_named.table;

バックティックを使用して取得し、テーブルを見つけます SELECT * FROM `poorly_named.table`;

于 2014-09-22T09:48:48.067 に答える