Question

MySQL me donne la douleur lorsque je tente de recréer une table particulière dans une base de données particulière; Je crois que le problème est que MySQL quelque part a des enregistrements de clés étrangères de la table et continue d'essayer de vérifier la contrainte lorsque je tente de recréer la table.

La base de données en question est pour l'environnement de test et est mise à jour périodiquement par le dumping de la prod DB, laissant tomber le test DB, créant ainsi le test DB à nouveau, puis en appliquant la décharge prod DB au nouveau test DB.

Mais hier soir quand je suis allé faire cette procédure, je courais tout à coup dans la errno de MySQL: 121, qui est normalement lié à une clé étrangère incorrecte ... Si je tente une défnition de table différente, sans spécifier une clé, je reçois errno: 150 à la place. Toutefois, cela ne se produit que si je tente d'appliquer la décharge à une nouvelle base de données exactement le même nom que l'ancien. Si je crée une base de données avec un nom différent de l'ancien (sur le même serveur encore) et appliquer la décharge, il n'y a pas de problème.

En fait, sans clés du tout, même dans une base de données complètement nouveau je ne peux même créer une table exactement le même nom.

Cet exemple illustre le problème

mysql> create database test_db;
Query OK, 1 row affected (0.01 sec)

mysql> connect test_db;
Connection id:    1590
Current database: test_db

mysql> create table client_feed_group(id int);
ERROR 1005 (HY000): Can't create table './test_db/client_feed_group.frm' (errno: 150)
mysql> create database new_db_name;
Query OK, 1 row affected (0.00 sec)

mysql> connect new_db_name;
Connection id:    1591
Current database: new_db_name

mysql> create table client_feed_group(id int);
Query OK, 0 rows affected (0.01 sec)

Je l'ai déjà abandonné la base de données test_db; cela devrait supprimer toutes les tables et tous les dossiers. Je crée ensuite, connectez-vous et essayer de créer la vieille table client_feed_group; Je reçois une erreur. Je crée une autre base de données avec un nom différent et suivez les mêmes étapes; cette fois il n'y a pas de problème.

Était-ce utile?

La solution

Il semble être le même que ce bug de MySQL .

La procédure située loin dans les commentaires de travail pour moi, qui est

  • créer la table en utilisant le même schéma que l'ancien, mais en utilisant un moteur MyISAM
  • utilisez la commande ALTER TABLE pour changer le moteur InnoDB

par la suite les choses semblent fonctionner correctement; Je peux maintenant laisser tomber la base de données et faire une restauration complète sans problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top