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

Wie behebe ich eine InnoDB-Beschädigung, die einen Tabellennamen vor der Erstellung sperrt (Fehlernummer:-1) auf AWS RDS?

DDL in InnoDB ist nicht transaktional, daher ist es möglich, dass Informationen in einer .frm-Datei und im InnoDB-Wörterbuch unterschiedlich sind. In Ihrem Fall sieht es so aus, als ob die .frm-Datei fehlt, aber es gibt einen verwaisten Datensatz im Wörterbuch (naja, tatsächlich Datensätze in einigen SYS_*-Tabellen des Wörterbuchs).

Sie können einen Eintrag nicht einfach aus dem Wörterbuch löschen. Sie benötigen eine entsprechende .frm-Datei, damit MySQL Ihren DROP an die InnoDB-Ebene weitergibt. Mit RDS geht das nicht.

Aber Sie können die gesamte Datenbank löschen. In diesem Fall entfernt InnoDB alle Datensätze aus dem Wörterbuch, einschließlich des verwaisten.

Also, um Ihr Wörterbuch zu bereinigen, schlage ich Folgendes vor:

  1. Stoppen Sie den gesamten Datenverkehr zu MySQL, machen Sie es schreibgeschützt
  2. Erstellen Sie eine temporäre Datenbank adstudio_tmp
  3. RENAME alle Tabellen aus adstudio zu adstudio_tmp
  4. DROP DATABASE adstudio . An dieser Stelle ist es leer. Der DROP löscht alle Einträge im InnoDB-Wörterbuch.
  5. RENAME alle Tabellen zurück von adstudio_tmp zu adstudio

Danach sollte das Wörterbuch sauber sein und Sie können Ihre data_feed_param erstellen .

Ich habe ein ähnliches Problem nach erfolglosem ALTER beschrieben TABELLE . Weitere Einzelheiten finden Sie hier.