Je suis assez nouveau sur MySQL et j'obtiens une erreur assez intéressante sur laquelle je ne trouve aucune aide via Google et la recherche stackoverflow.
J'exécute un serveur local de MySQL 5.6.10 sur MacOS 10.8.3 et gère ma base de données via Navicat essentials pour MySQL.
L'erreur que j'obtiens est qu'après avoir exécuté et géré ma base de données très bien pendant quelques jours / semaines, quelque chose déclenche (cela semble incomplet) supprimer certaines des tables que j'ai créées à l'aide de requêtes depuis Navicat.
Lorsque j'essaye d'exécuter des requêtes à l'aide de ces tables, Navicat me prévient alors que la table particulière n'existe pas. Jusqu'ici tout va bien - voici la bonne partie:
Quand j'essaye de CRÉER la table, par exemple nommée "temp", qui était auparavant là, 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 de supprimer l'espace de table de cette table, en utilisant
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 me est conseillé de supprimer l'espace table, mais lorsque j'essaye de le faire, la table n'existe pas. Est-il possible qu'il existe un type de reste de cette table à un endroit différent où la requête DISCARD n'est pas vérifiée? Et est-ce que quelqu'un a une idée de ce qui pourrait déclencher tout cela - complètement au hasard comme il semble?
Comme je l'ai dit, je suis nouveau sur le sujet et à peu près ignorant. Je soupçonne que le redémarrage de mon ordinateur portable, c'est-à-dire la réinitialisation de mon serveur MySQL local, ou peut-être que les droits de permission des utilisateurs pourraient avoir à voir avec cela, mais je fais juste l'hypothèse ici.
la source
Réponses:
Un peu tard ici, mais en général, j'ai vu ce problème se produire lorsque vous obtenez une erreur «tablespace full» lors de l'exécution en mode «innodb_file_per_table». Sans entrer trop dans les détails (plus ici ), le tablespace du serveur de base de données est défini par le paramètre innodb_data_file_path et par défaut est plutôt petit. Même agrandi, le «tablespace plein» peut toujours se produire avec des requêtes plus volumineuses et autres (beaucoup de «trucs» non-table sont stockés là-dedans, annulent les journaux, les caches, etc.).
Quoi qu'il en soit, j'ai trouvé que si vous regardez dans le répertoire du système d'exploitation où les fichiers par table sont stockés, / var / lib / mysql par défaut sur OSX, / usr / local / var / mysql avec homebrew iirc, vous trouverez un fichier nomtable.ibd orphelin sans son fichier compagnon normal nomtable.frm. Si vous déplacez ce fichier .ibd vers un emplacement temporaire sûr (juste pour être sûr), cela devrait résoudre le problème.
Une mise en garde cependant, assurez-vous que ce qui cause le problème à l'origine, par exemple une longue requête, une table verrouillée, etc. a été effacé. Sinon, vous vous retrouvez avec un autre fichier .ibd orphelin lorsque vous essayez une deuxième fois.
la source
/usr/local/mysql/data
place de/var/lib/mysql/
. Sinon parfaitement résolu le problème.Utilisateurs Xampp et Mamp
Eu la même erreur lors de l'importation d'une base de données (après l'avoir vidée) via MySQL. J'ai constaté qu'il me restait un
tablename.ibd
fichier tandis que tous les autres étaient supprimés. Je l'ai supprimé manuellementmysql/data/database_name
et l'erreur a disparu.la source
Pour les utilisateurs de WAMP [Windows 7 Ultimate x64 bits]:
Je suis d'accord avec ce que DangerDave a dit et je mets donc une réponse à la disposition des utilisateurs de WAMP .
Maintenant, vous verrez les dossiers de toutes vos bases de données
[Your offending MySQL table name].frm
, mais plutôt un fichier[Your offending MySQL table name].ibd
[Your offending MySQL table name].ibd
la source
Si vous obtenez le
.idb
recréé après l'avoir supprimé, lisez cette réponse.Voilà comment cela a fonctionné avec moi. J'ai eu le
.idb
fichier sans sa correspondance.frm
et chaque fois que je supprime le.idb
fichier, la base de données le recrée à nouveau. et j'ai trouvé la solution en une seule ligne dans la documentation MySQL (la partie Tablespace n'existe pas )J'ai copié un autre
.frm
fichier de table et le nommez comme ma table manquante, puis effectuez une requête de table de dépôt normale et le tour est joué, cela a fonctionné et la table est supprimée normalement!mon système est XAMPP sur windows MariaDB v 10.1.8
la source
Dans mon cas, la seule solution de travail était:
bad_table
ENGINE = MyISAM ...bad_table
la source
C'est exactement ce que j'ai fait dans mariadb 10.2.16 sur fedora quand j'avais une table qui montrait exactement les mêmes erreurs dans le fichier journal, je suppose ...
votre kilométrage et vos erreurs peuvent varier, mais je suppose que le principal est
avec la table de dépôt ne fonctionne pas aussi bien que modifier la table ...
create table échoue également comme ceci:
pour résoudre ce problème, ce que j'ai fait était d'abord
puis dans le répertoire / var / lib / mysql / database_name, j'ai fait ce qui suit en tant que root en reconnaissant l'écrasement de innodb_table.ibd nous causant des problèmes
puis de retour dans la console mysql, j'ai émis une commande drop réussie sur les deux tables
et tout est maintenant tout carré et je peux recréer une seule table ...
la source
Dans mon cas:
Supprimez d'abord
tableName.ibd
dans votre répertoire de base de données de Mysql et deuxième exécution:la source
J'ai eu la même erreur en l'exécutant sur wampserver en essayant de créer une table d'utilisateurs. J'ai trouvé un fichier users.ibd et après avoir supprimé ce fichier, j'ai exécuté à nouveau la commande migrate et cela a fonctionné. Le fichier sur ma machine Windows se trouvait dans wamp / bin / mysql / mysql5.6.12 / data / myproject.
la source
Solution
Cependant, l'option la plus simple est la suivante: redémarrez MySQL, puis effectuez les quatre mêmes étapes comme suit:
De cette façon, l'identifiant du tablespace sur le dictionnaire de données et le fichier correspondaient; ainsi l'importation du tablespace a réussi.
Cela peut vous donner une plus grande confiance dans le traitement de certains des «pièges» d'InnoDB pendant le processus de récupération ou même les transferts de fichiers.
réf
la source
Voici les étapes de la solution:
la source
Eu ce problème plusieurs fois. Si vous avez une base de données volumineuse et que vous souhaitez éviter la sauvegarde / restauration (avec une table manquante ajoutée), essayez plusieurs fois d'avant en arrière:
DROP TABLE ma_table;
ALTER TABLE ma_table DISCARD TABLESPACE;
-et-
rm my_table.ibd (orphelin sans ma_table.frm correspondant) situé dans le répertoire / var / lib / mysql / my_db /
-puis-
CRÉER UN TABLEAU S'IL N'EXISTE PAS
my_table
(...)la source
Supprimer / déplacer tablename.ibd n'a certainement pas fonctionné pour moi.
Comment je l'ai résolu
Puisque j'allais supprimer la table corrompue et inexistante, j'ai pris une sauvegarde des autres tables en allant à phpmyadmin-> base de données-> exportation-> tables sélectionnées à sauvegarder-> exportation (comme .sql).
Après cela, j'ai sélectionné l'icône de la base de données à côté du nom de la base de données, puis je l'ai supprimée. Création d'une nouvelle base de données. Sélectionnez votre nouvelle base de données-> importer-> Sélectionnez le fichier que vous avez téléchargé plus tôt-> cliquez sur importer. Maintenant, j'ai mes anciennes tables de travail et j'ai supprimé la table corrompue. Maintenant, je crée juste la table qui lançait l'erreur.
J'avais probablement une sauvegarde antérieure de la table corrompue.
la source
Cette erreur se produit lorsque vous suspendez certaines fonctions. Comme exécuter la requête ci-dessous avec une clé étrangère incorrecte.
la source
Avait exactement le même problème; Je brasserais ajouté
[email protected]
(après avoir précédemment 5,5).Les valeurs par défaut pour 5,6 sont
innodb_file_per_table=1
alors que pour 5,5 elles sontinnodb_file_per_table=0
.Votre
ibdata1
fichier existant (les données innodb combinées) aura toujours des références aux tables que vous essayez de créer / supprimer. Soitinnodb_file_per_table
revenir à 0, soit supprimer le fichier de données ibdata1 ( cela vous fera perdre toutes vos données, alors assurez-vous que vous le mysqldumpez d'abord ou que vous avez déjà un vidage .sql ).L'autre
[email protected]
défaut de brassage qui m'a mordu était le manque de port, donc la mise en réseau était par défaut sur les sockets unix, et le client mysql continuait à rapporter:J'ai ajouté
<string>--port=3306</string>
au.plist
tableau, mais vous pouvez également spécifierport=3306
dans votremy.cnf
Exécutez
brew services stop [email protected]
vos modifications puisbrew services start [email protected]
la source
Essayer de supprimer le tablespace peut vous donner d'autres erreurs. Pour moi, j'ai eu l'erreur suivante:
Ma solution était de supprimer la base de données. Cela supprimera tous les tablespaces associés et vous permettra de créer à nouveau les tables.
la source
rm -r
. C'est irritant, mais ni spectaculaire.Si vous avez un autre serveur avec une bonne version de la même table, vous pouvez faire une copie (table_copy), transférer la table_copy vers le serveur problématique. Supprimez ensuite la table de problème et renommez table_copy en table.
la source
Pour moi, cela m'a aidé à aller dans le répertoire MYSQL DATA sous / var / lib / mysql / {nom_base} (linux) et à déposer le fichier {nom_table} .ibd qui était le même que le nom du dossier.
la source
Je ne supprime que mon ancienne base de données située dans mon hôte local directement depuis wamp, arrêtez tous les services, allez dans wamp / bin / mysql / mysql [version] / data et j'ai trouvé la base de données avec problemas, je la supprime et redémarre wamp tous les services, recréez votre base de données et c'est fait, maintenant vous pouvez importer vos tables,
la source
La façon dont j'ai trouvé pour "résoudre" ce problème est assez ennuyeuse, mais il existe un script qui le gère.
Essentiellement, vous avez besoin que les fichiers
ibdata1
etib_logfile*
disparaissent (ils contiennent les mappages de clés étrangères, entre autres). Le seul moyen sûr de le faire est d'exporter toutes vos bases de données, d'arrêter mysql, de supprimer les fichiers, de démarrer mysql, puis d'importer les fichiers.Le script qui aide à résoudre ce problème est https://github.com/uberhacker/shrink-ibdata1 , même si l'objectif déclaré de ce script est différent, il fait résoudre le problème.
la source
La seule façon dont cela a fonctionné pour moi était:
la source
si vous rencontrez ce problème et que vous n'avez pas d'autre option, remplacez le moteur par un autre moteur comme «myisam», puis essayez de créer la table.
avertissement: ce n'est pas la réponse valable car vous pouvez avoir des contraintes de clé étrangère qui ne seront pas prises en charge par un autre moteur de stockage. Chaque moteur de stockage a sa propre spécialité pour stocker et accéder aux données, ces points doivent également être pris en compte.
la source
Veuillez REJETER le tablespace avant IMPORT
J'ai la même solution de problème ci-dessous
Vous devez d'abord supprimer le nom de votre base de données. si votre base de données ne supprime pas, vous avez flow me. Pour le système Windows, votre répertoire sera C: / xampp / mysql / data / yourdabasefolder remove "yourdabasefolder"
Encore une fois, vous devez créer une nouvelle base de données et importer votre ancien fichier sql. Ce sera du travail
Merci
la source
J'ai dû localiser mon répertoire de données MySQL:
SHOW VARIABLES WHERE Variable_Name LIKE "% dir"
Puis forcez la suppression de cette base de données:
sudo rm -rf
la source
Vous pouvez exécuter la requête suivante en tant qu'utilisateur root mysql
la source
Hé les développeurs ne perdent pas votre temps. Supprimez simplement la base de données contenant les tables et importez à nouveau des tables entières. Gagnez du temps = le temps c'est de l'argent. À votre santé.
la source