Mysql
 sql >> Datenbank >  >> RDS >> Mysql

FEHLER 1005 (HY000):Tabelle x kann nicht erstellt werden (Fehlernummer:-1)

Dies ist eine alte Frage, aber ich habe sie erst heute bekommen und eine Lösung gefunden (und ja mit errno =-1).

Unsere Tabelle ist InnoDB und wurde alle paar Stunden erstellt und zerstört. Wir hatten kürzlich einen Slave-Server gestartet, um diesem Master zu folgen. Wir verwenden auch die Option "innodb_file_per_table".

Der Fehler trat nur auf dem Slave auf, nicht auf dem Master. Das Problem bestand darin, dass wir diesen Slave vor einigen Stunden mit rsync mit dem Master synchronisiert haben.

Rsync kopierte die Tabellendatei, wurde dann aber vom Master zwischenzeitlich gelöscht, da es sich um eine temporäre Tabelle handelte. Die .idb-Datei existierte also im Slave, aber nicht mehr im Master.

Als der Master eine Anfrage zum Erstellen der Tabelle sendete, konnte der Slave dies nicht, da die Datei bereits vorhanden war. MySQL war sich nicht bewusst, dass eine Tabelle existiert, da die Metadaten besagten, dass keine Tabelle vorhanden war. Ich gehe davon aus, dass MySQL versucht hat, die Datei zu erstellen, aber da sie vorhanden war, ist es fehlgeschlagen.

In meinem Fall bestand die Lösung darin, die .idb-Datei in einem anderen Ordner zu löschen (natürlich zuerst mit einer Sicherungskopie).

Danach würde uns die Datenbank erlauben, die Tabelle zu erstellen, und der Slave würde dann wieder dem Master folgen

Ein besserer Weg, dies zu tun, wäre gewesen, eine --delete-Option zu verwenden, um alle veralteten Dateien zu entfernen, die vom Master verschwunden sind.

Wie auch immer - Sie haben möglicherweise nicht genau die Situation, die ich beschrieben habe, aber es könnte einfach eine veraltete Datei sein, die aus dem einen oder anderen Grund dort gelassen wird.