Heim >Datenbank >MySQL-Tutorial >Warum meldet MySQL eine Tabelle nach der Änderung des Datenverzeichnisses als nicht vorhanden, obwohl SHOW TABLES sie auflistet?

Warum meldet MySQL eine Tabelle nach der Änderung des Datenverzeichnisses als nicht vorhanden, obwohl SHOW TABLES sie auflistet?

Linda Hamilton
Linda HamiltonOriginal
2024-12-06 10:36:121027Durchsuche

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

MySQL-Tabelle existiert nicht? Aber als ich das MySQL-Datenverzeichnis änderte, das vorhanden sein sollte, wurden alle Datenbanken bis auf eine erfolgreich verschoben. Ich kann eine Verbindung zur Datenbank herstellen und diese verwenden, der Befehl SHOW TABLES gibt alle Tabellen korrekt zurück und die Dateien für jede Tabelle sind im MySQL-Datenverzeichnis vorhanden.

Aber wenn ich versuche, etwas aus der Tabelle auszuwählen, erhalte ich die Fehlermeldung, dass die Tabelle nicht existiert. Das macht keinen Sinn, da ich dieselbe Tabelle mit der SHOW TABLES-Anweisung anzeigen konnte.

Ich vermute, dass SHOW TABLES die Existenz der Datei auflistet, aber nicht prüft, ob die Datei beschädigt ist. Daher können Sie diese Dateien zwar auflisten, aber nicht darauf zugreifen.

Allerdings ist es nur eine Vermutung. So einen Fall habe ich noch nie erlebt. Ich kann die Datenbank derzeit nicht neu starten und testen, aber alle anderen Anwendungen, die die Datenbank verwenden, funktionieren einwandfrei.

Kennt jemand den Grund für dieses Phänomen?

Beispiel:

Lösung:
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

Kopieren Sie das Datenbankverzeichnis direkt mit dem folgenden Befehl. Möglicherweise tritt das gleiche Problem auf auftreten, wenn Sie dies tun.

Wenn ich dies in einer Datenbank mache, die InnoDB-Tabellen verwendet, erhalte ich die oben erwähnte seltsame Fehlermeldung „Tabelle existiert nicht“.

cp -r /path/to/my/database /var/lib/mysql/new_database
Das Problem ist, dass ich ib*-Dateien (z. B. ibdata1, ib_logfile0, ib_logfile1) im Stammverzeichnis des MySQL-Datenverzeichnisses benötige.

Ich habe diese Dateien kopiert und es hat gut funktioniert.

Das obige ist der detaillierte Inhalt vonWarum meldet MySQL eine Tabelle nach der Änderung des Datenverzeichnisses als nicht vorhanden, obwohl SHOW TABLES sie auflistet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn