sql >> Database >  >> RDS >> Mysql

Hoe los ik InnoDB-corruptie op die een tabelnaam vergrendelt bij het maken (errno:-1) op AWS RDS?

DDL in InnoDB is niet transactioneel, dus het is mogelijk dat informatie in een .frm-bestand en het InnoDB-woordenboek anders is. In jouw geval lijkt het erop dat het .frm-bestand ontbreekt, maar er is een verweesd record in het woordenboek (nou ja, eigenlijk records in enkele woordenboek SYS_*-tabellen).

U kunt een record niet gemakkelijk uit het woordenboek verwijderen. U hebt een respectievelijk .frm-bestand nodig, zodat MySQL uw DROP doorgeeft aan InnoDB-niveau. Met RDS kun je het niet.

Maar u kunt de hele database DROPPEN. In dat geval zal InnoDB alle records uit het woordenboek verwijderen, inclusief de verweesde.

Dus om je woordenboek op te schonen, raad ik het volgende aan:

  1. Stop al het verkeer naar MySQL, maak het alleen-lezen
  2. Maak een tijdelijke database adstudio_tmp
  3. RENAME alle tabellen van adstudio naar adstudio_tmp
  4. DROP DATABASE adstudio . Op dit punt is het leeg. De DROP zal alle vermeldingen in het InnoDB-woordenboek wissen.
  5. RENAME alle tabellen terug van adstudio_tmp naar adstudio

Hierna zou het woordenboek schoon moeten zijn en kunt u uw data_feed_param maken .

Ik beschreef een soortgelijk probleem na mislukte ALTER TABEL . Bekijk het voor meer details.



  1. toegang krijgen tot een kolomaliassen in de waar-clausule in postgresql

  2. Converteer UTC-milliseconden naar DATETIME in SQL-server

  3. hoe alle beperkingen op een tafel in Oracle te controleren

  4. Top 18 gratis en veelgebruikte, open source NoSQL-databases