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

ERREUR 1005 (HY000) :Impossible de créer la table x (errno :-1)

C'est une vieille question, mais je viens de la recevoir aujourd'hui et j'ai trouvé une solution (et oui avec errno =-1).

Notre table est InnoDB et a été créée et détruite toutes les quelques heures. Nous avions récemment démarré un serveur esclave pour suivre ce maître. Nous utilisons également l'option "innodb_file_per_table".

L'erreur se produirait sur l'esclave uniquement, pas sur le maître. Le problème était que nous avons récemment synchronisé cet esclave avec le maître en utilisant rsync quelques heures auparavant.

Rsync a copié le fichier de la table, mais a ensuite été supprimé par le maître entre-temps, puisqu'il s'agissait d'une table temporaire. Le fichier .idb existait donc dans l'esclave, mais plus dans le maître.

Lorsque le maître a envoyé une requête pour créer la table, l'esclave n'a pas pu car le fichier était déjà là. MySQL ne savait pas qu'une table existait car les métadonnées indiquaient qu'aucune table n'était là.Je suppose que MySQL essayait de créer le fichier, mais comme il était là, il a échoué.

Dans mon cas, la solution était de supprimer le fichier .idb dans un autre dossier (bien sûr avec une copie de sauvegarde en premier).

Après cela, la base de données nous permettrait alors de créer la table, et l'esclave suivrait alors à nouveau le maître

Une meilleure façon de faire cela rsync aurait été d'utiliser une option --delete pour supprimer tous les fichiers obsolètes qui avaient disparu du maître.

Quoi qu'il en soit, vous n'aurez peut-être pas la situation exacte que j'ai décrite, mais il pourrait simplement s'agir d'un fichier obsolète laissé là pour une raison ou une autre.