156 votes

Erreur : Le tablespace pour la table xxx existe. Veuillez supprimer le tablespace avant d'importer.

Je suis assez novice en matière de MySQL et je rencontre une erreur assez intéressante pour laquelle je ne trouve aucune aide via Google et la recherche stackoverflow.

J'utilise un serveur local de MySQL 5.6.10 sur MacOS 10.8.3 et je gère ma base de données via Navicat essentials for MySQL.

L'erreur que je rencontre est qu'après avoir exécuté et géré ma base de données sans problème pendant quelques jours/semaines, quelque chose se déclenche pour supprimer (de manière incomplète, semble-t-il) certaines des tables que j'ai créées à l'aide de requêtes dans Navicat.

Lorsque j'essaie d'exécuter des requêtes à l'aide de ces tables, Navicat m'avertit que la table en question n'existe pas. Jusqu'ici tout va bien - voici la partie la plus intéressante :

Lorsque j'essaie de CRÉER la table, par exemple nommée "temp", qui existait auparavant, j'obtiens le message d'erreur suivant :

Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.

Cependant, si j'essaie de supprimer la table, ou si j'essaie de supprimer le tablespace pour cette table, en utilisant la fonction

DROP TABLE temp;
ALTER TABLE temp DISCARD TABLESPACE;

Je reçois les messages d'erreur suivants :

Error : Unknown table 'database.temp'
Error : Table 'database.temp' doesn't exist

Cela signifie donc qu'il m'est conseillé de supprimer l'espace de table, mais lorsque j'essaie de le faire, la table n'existe pas. Est-il possible qu'il y ait une sorte de vestige de cette table à un autre endroit où la requête DISCARD n'est pas vérifiée ? Et quelqu'un a-t-il une idée de ce qui pourrait déclencher tout cela - de manière totalement aléatoire, semble-t-il ?

Comme je l'ai dit, je suis novice en la matière et je ne sais pas grand-chose. Je pense que le redémarrage de mon ordinateur portable, c'est-à-dire la réinitialisation de mon serveur MySQL local, ou peut-être les droits d'accès de l'utilisateur pourraient avoir un rapport avec ce problème, mais je ne fais que formuler des hypothèses.

2voto

Mahmoud Rabea Points 43

Voici les étapes de la solution :

  1. sauvegarder votre base de données (structure avec option de dépôt et données)
  2. arrêter le service du moteur mysql
  3. supprimer manuellement le répertoire de la base de données à partir de mysql/data
  4. démarrer le moteur mysql
  5. créer une nouvelle base de données avec un nom différent de la base de données corrompue
  6. créer une table unique avec le nom de la table corrompue à l'intérieur de la nouvelle base de données (c'est le secret). et il est préférable de créer la table avec exactement la même structure.
  7. renommer la base de données à l'ancienne base de données corrompue
  8. restaurez votre sauvegarde et votre table fonctionnera bien.

2voto

jaygooby Points 506

J'ai eu exactement le même problème ; j'avais ajouté des brasseurs mysql@5.6 (après avoir eu précédemment 5.5).

Les valeurs par défaut de la brasserie pour 5.6 sont les suivantes innodb_file_per_table=1 alors qu'en 5.5 ils sont innodb_file_per_table=0 .

Votre situation actuelle ibdata1 (les données innodb combinées) aura toujours des références aux tables que vous essayez de créer/déposer. Soit vous changez innodb_file_per_table à 0, ou supprimer le fichier de données ibdata1 ( Cela vous fera perdre toutes vos données, alors assurez-vous de faire un mysqldump ou d'avoir déjà un dump .sql. ).

L'autre brassage mysql@5.6 Le défaut qui m'a piqué est l'absence de port, donc la mise en réseau se faisait par défaut sur des sockets unix, et le client mysql continuait à faire des rapports :

ERROR 2013 (HY000): Lost connection to MySQL server at 'sending authentication information', system error: 32

J'ai ajouté <string>--port=3306</string> à la .plist mais vous pouvez également spécifier port=3306 dans votre my.cnf

Exécuter brew services stop mysql@5.6 effectuez vos modifications puis brew services start mysql@5.6

1voto

zeddarn Points 90

Cette erreur se produit lorsque vous suspendez certaines fonctions. Comme l'exécution de la requête ci-dessous avec une clé étrangère incorrecte.

set foreign_key_checks=0

1voto

Satheesh kumar Points 41

J'ai eu le même problème. J'ai renommé le nom de la base de données et je l'ai importée. Ensuite, cela fonctionne.

Faites simple : Juste Renommer le nom de la base de données . C'est tout.

Le problème est que le nom de la base de données existante a quelques entrées dans votre dossier. C'est là le problème. Soit vous devez supprimer toutes ces entrées connexes, soit Soit vous simplifiez le renommage de la base de données

0voto

Aris Points 1407

Essayer de supprimer le tablespace peut entraîner d'autres erreurs. Pour moi, j'ai eu l'erreur suivante :

DROP TABLESPACE `tablename`

Error Code: 1478. Table storage engine 'InnoDB' does not support the create option 'TABLESPACE or LOGFILE GROUP' 

Ma solution a été de supprimer la base de données. Cela supprimera tous les tablespaces qui y sont liés et vous permettra de créer à nouveau les tables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X