Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso correggere il danneggiamento di InnoDB che blocca il nome di una tabella dalla creazione (errno:-1) su AWS RDS?

DDL in InnoDB non è transazionale, quindi è possibile che le informazioni in un file .frm e nel dizionario InnoDB siano diverse. Nel tuo caso sembra che manchi il file .frm ma c'è un record orfano nel dizionario (beh, in realtà registra in alcune tabelle SYS_* del dizionario).

Non è possibile eliminare facilmente un record dal dizionario. Hai bisogno di un rispettivo file .frm in modo che MySQL passi il tuo DROP al livello InnoDB. Con RDS non puoi farlo.

Ma puoi DROP dell'intero database. In tal caso InnoDB rimuoverà tutti i record dal dizionario incluso quello orfano.

Quindi, per pulire il tuo dizionario ti suggerisco di seguire:

  1. Interrompi tutto il traffico verso MySQL, rendilo di sola lettura
  2. Crea un database temporaneo adstudio_tmp
  3. RENAME tutte le tabelle da adstudio a adstudio_tmp
  4. DROP DATABASE adstudio . A questo punto è vuoto. Il DROP cancellerà tutte le voci nel dizionario InnoDB.
  5. RENAME tutte le tabelle da adstudio_tmp a adstudio

Dopo questo il dizionario dovrebbe essere pulito e sarai in grado di creare il tuo data_feed_param .

Ho descritto un problema simile dopo ALTER non riuscito TABELLA . Dai un'occhiata per maggiori dettagli.