sql >> Databasteknik >  >> RDS >> Mysql

Hur fixar jag InnoDB-korruption som låser ett tabellnamn från att skapas (fel:-1) på AWS RDS?

DDL i InnoDB är inte transaktionsbaserat så det är möjligt att informationen i en .frm-fil och InnoDB-ordboken är annorlunda. I ditt fall ser det ut som att .frm-filen saknas men det finns en föräldralös post i ordboken (tja, faktiskt poster i några ordbok SYS_*-tabeller).

Du kan inte enkelt radera en post från ordboken. Du behöver en respektive .frm-fil så att MySQL skickar din DROP till InnoDB-nivå. Med RDS kan du inte göra det.

Men du kan SLAPPA hela databasen. I så fall kommer InnoDB att ta bort alla poster från ordboken inklusive den föräldralösa.

Så för att rensa din ordbok föreslår jag följande:

  1. Stoppa all trafik till MySQL, gör den skrivskyddad
  2. Skapa en tillfällig databas adstudio_tmp
  3. RENAME alla tabeller från adstudio till adstudio_tmp
  4. DROP DATABASE adstudio . Vid det här laget är det tomt. DROP kommer att radera alla poster i InnoDB-ordboken.
  5. RENAME alla tabeller tillbaka från adstudio_tmp till adstudio

Efter detta bör ordboken vara ren och du kommer att kunna skapa din data_feed_param .

Jag beskrev ett liknande problem efter misslyckade ALTER TABELL . Kolla in den för mer information.



  1. Hur man skapar Array i PostgreSQL

  2. Få fältvärdet med en markör

  3. extrahera de ID som tilldelats en lista med användar-ID

  4. pgmemcache vs Infinite Cache