Es ist durchaus möglich, dass die Tabelle beschädigt ist. Ich meine nicht, dass die Daten und / oder Indexseiten beschädigt sind. Es könnte etwas sehr Einfaches geben, das kaputt ist.
Ich habe kürzlich ein Problem mit einem Sicherungsskript auf einem Slave-Server festgestellt, als ich mehrere Datenbanken parallel mysqldumped habe. Das Ausführen von mysqldump in einer der Datenbanken führte zu einem sehr kleinen mysqldump. Die DB hatte mehr als 80 Tabellen. Der mysqldump wurde jedoch an der fünften Tabelle in der Datenbank angehalten. Als ich SHOW CREATE TABLE tblname\G
auf dem Slave auf dem Tisch lief , bekam ich den Fehler "Tabelle nicht gefunden". Als ich rannteSHOW CREATE TABLE tblname\G
auf dem Master lief, wurde die Tabellenbeschreibung wie erwartet angezeigt.
Was passierte, war ein wenig verrückt: Ein Client bat um eine Wiederherstellung der Tabelle, und ein Techniker stellte die .ibd-Datei der InnoDB-Tabelle aus einer Festplattensicherung wieder her. Die Tablespace-ID der .ibd-Datei (25) stimmte nicht mit der in ibdata1 (28) registrierten Tablespace-ID überein.
Ich habe das Problem behoben, indem ich den Slave abgespritzt, den Master mysqldumped und die Replikation von Grund auf neu eingerichtet habe. Glücklicherweise betrug der Daten- und Indexspave insgesamt 7 GB. Daher war der Wiederherstellungsprozess keine große Sache.
MORAL DER GESCHICHTE
Das Grundproblem besteht darin, dass mysqldump keinen Fehler in einer InnoDB meldet, wenn die Tablespace-ID falsch ist. Wenn ein mysqldump beendet wird und nicht jede Tabelle in alphabetischer Reihenfolge speichert, bedeutet dies, dass sie durch einen Fehler beendet wurde und dies ohne Drucken einer Fehlermeldung.
Überprüfen Sie, um sicherzugehen
- Sie können die Struktur der Tabelle mit anzeigen
SHOW CREATE TABLE
- Sie können alles über eine Tabelle in INFORMATION_SCHEMA.TABLES abfragen