Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment réparer la corruption InnoDB bloquant un nom de table dès la création (errno :-1) sur AWS RDS ?

DDL dans InnoDB n'est pas transactionnel, il est donc possible que les informations d'un fichier .frm et du dictionnaire InnoDB soient différentes. Dans votre cas, il semble que le fichier .frm soit manquant, mais il existe un enregistrement orphelin dans le dictionnaire (en fait, des enregistrements dans quelques tables SYS_* du dictionnaire).

Vous ne pouvez pas facilement supprimer un enregistrement du dictionnaire. Vous avez besoin d'un fichier .frm respectif pour que MySQL transmette votre DROP au niveau InnoDB. Avec RDS, vous ne pouvez pas le faire.

Mais vous pouvez DROP toute la base de données. Dans ce cas, InnoDB supprimera tous les enregistrements du dictionnaire, y compris celui qui est orphelin.

Donc, pour nettoyer votre dictionnaire, je vous suggère de suivre :

  1. Arrêtez tout trafic vers MySQL, rendez-le en lecture seule
  2. Créer une base de données temporaire adstudio_tmp
  3. RENAME tous les tableaux de adstudio vers adstudio_tmp
  4. DROP DATABASE adstudio . À ce stade, il est vide. Le DROP effacera toutes les entrées du dictionnaire InnoDB.
  5. RENAME toutes les tables de retour de adstudio_tmp à adstudio

Après cela, le dictionnaire devrait être propre et vous pourrez créer votre data_feed_param .

J'ai décrit un problème similaire après ALTER infructueux TABLE . Consultez-le pour plus de détails.