J'ai un «test» de table myism qui contient des données obsolètes. Je souhaite maintenant recréer la table, toutes les colonnes étant identiques, sauf que j'ai changé le stockage de myism à innodb. Le sql vidé sur lequel je recréais la table ressemblait à ceci:
drop table test;
create table test ( ... )
engine=innodb
insert into test(...) values(...)
c'est là que j'ai eu l'erreur "Got Error -1 from storage engine", j'ai cherché dans Google, la plupart des résultats se concentrent sur des tables innodb corrompues. Alors que pour mon cas, je ne pense pas que ce soit cassé, c'est juste quelque chose que j'ai manqué à la chute et crée des déclarations.
Une autre chose est que, après avoir exécuté le sql ci-dessus, tout ce qui reste pour le test de la table est un fichier nommé file.frm, je suppose que la table innodb a besoin d’autres fonctions, mais ne sait pas trop quoi.
Comment puis-je résoudre ce problème? Et j’ai probablement besoin de faire plus de tâches de ce type, quelle est la procédure correcte pour supprimer la table myism et la recréer sous forme innodb?
Merci.
D'ACCORD. J'ai trouvé la solution. Le problème était dû au paramètre innodb_force_recovery dans my.cnf, défini sur 4.
Pour résoudre le problème, définissez la valeur sur 0 ou supprimez complètement ce paramètre de my.cnf.
Si vous consultez le journal des erreurs, pendant la requête, mysql écrira dans un langage lisible par l'homme que: Il ne vous laissera rien changer dans la table tant que le mode de récupération innodb n'est pas activé, exactement le message suivant:
InnoDB: A new raw disk partition was initialized or InnoDB: innodb_force_recovery is on: we do not allow InnoDB: database modifications by the user. Shut down InnoDB: mysqld and edit my.cnf so that newraw is replaced InnoDB: with raw, and innodb_force_... is removed.
Veuillez vous reporter à:http://bugs.mysql.com/bug.php?id=30225
Une cause commune de l'erreur -1 est un disque complet. J'ai plusieurs petites machines virtuelles à des fins de test, et innodb
ne cesse de les remplir (et j'oublie continuellement)
$df -ah
S'il vous montre le disque à 100%, c'est l'origine du -1
à cet endroit;)
J'avais ceci avec une importation SQL sur Azure et j'avais besoin de changer
ENGINE = MyISAM avec ENGINE = InnoDB
Allez à /etc/my.cnf
Commentaire line innodb_force_recovery = 1
Enregistrez le fichier et redémarrez mysql
Pour découvrir quel est le code d'erreur pour tout code d'erreur système sur un système Unix ou Linux, consultez errno.h. Sur mon mac, je peux faire:
$ grep 28 /usr/include/sys/errno.h
#define ENOSPC 28/* Il ne reste plus d'espace sur le périphérique * /
Sur d'autres systèmes d'exploitation, tels que Linux, il y aura d'autres couches en raison des sous-couches de la machine. Mais, vous devriez être capable de parcourir ces fichiers et de trouver ces définitions d'erreur.
Vous pouvez également utiliser la commande "man" pour rechercher "intro" ou d'autres pages de manuel dans la section "2", la section du système d'exploitation.