72 votes

Moteur de stockage inconnu/non pris en charge : InnoDB | MySQL Ubuntu

Récemment, j'ai mis à niveau d'Ubuntu LTS précédent vers Precise et maintenant mysql refuse de démarrer. Il se plaint de ce qui suit lorsque j'essaie de le démarrer:

$ sudo service mysql restart
stop: Instance inconnue:
start: Échec du démarrage du travail

Et cela s'affiche dans "/var/log/mysql/error.log":

120415 23:01:09 [Note] Le plugin 'InnoDB' est désactivé.
120415 23:01:09 [Note] Le plugin 'FEDERATED' est désactivé.
120415 23:01:09 [ERROR] Moteur de stockage inconnu/non pris en charge : InnoDB
120415 23:01:09 [ERROR] Abandon

120415 23:01:09 [Note] /usr/sbin/mysqld: Arrêt complet

J'ai vérifié les autorisations sur tous les répertoires mysql pour m'assurer qu'il en était propriétaire et j'ai aussi renommé les anciens ib_logs pour qu'il puisse les recréer. Je n'avance pas du tout avec ce problème pour l'instant, après avoir parcouru les résultats de Google pendant 2 heures.

0 votes

Soit dit en passant, j'ai réussi à faire fonctionner mysql en commentant l'entrée "skip_innodb" dans mon.cnf. Mais je suis assez sûr que je ne devais pas résoudre cela de cette manière.

0 votes

Veuillez afficher toutes les variables de mon.cnf qui sont des paramètres InnoDB

0 votes

La cause réelle est répertoriée dans les quelques entrées de journal précédant celles que vous avez affichées.

74voto

takien Points 176

Après avoir vérifié les journaux, j'ai trouvé l'erreur suivante :

[ERROR] Moteur de stockage inconnu/non pris en charge : InnoDB

J'ai supprimé ces fichiers :

rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1 

à /var/lib/mysql

Cela a résolu mon problème après le redémarrage.

8 votes

La commande rm est utilisée pour supprimer des fichiers plutôt que de les renommer autant que je sache...

8 votes

Ces fichiers contiennent les données réelles de votre base de données. Vous ne voulez pas les supprimer.

4 votes

Non, le fichier ibdata contient les données (à moins que vous n'ayez un fichier par table). Les fichiers ib_logfile sont les journaux de replay contenant les données des transactions modifiant la base de données qui étaient en cours lors du crash éventuel de la base de données. Si vous avez réussi à arrêter le serveur correctement, supprimer ces fichiers de journal ne vous causera aucun problème. S'il a planté, alors vous en aurez besoin. Cependant, c'est une réponse valable. Si votre fichier my.cnf modifie l'option innodb_log_file_size et ne correspond plus à ces deux fichiers, vous obtiendrez le message d'erreur indiqué par l'OP. Supprimer/déplacer les fichiers afin d'en générer de nouveaux résout ce problème.

22voto

Rosamunda Points 179

Si vous avez vraiment besoin de skip-innodb (cas d'utilisation : empreinte mémoire basse), alors bien sûr, vous n'avez pas besoin de le commenter. Cependant, si InnoDB est le moteur de stockage par défaut, le serveur échouera au démarrage jusqu'à ce que vous lui disiez quel moteur de stockage utiliser à la place, par exemple default-storage-engine=myisam pour MyISAM.

Donc, essayez ceci:

$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam

7 votes

Essayez d'ajouter "default-storage-engine=myisam" à /etc/mysql/my.cnf dans la section [mysqld] si vous souhaitez avoir "skip_innodb".

0 votes

Fonctionne magnifiquement. Santé!

4 votes

Et si vous voulez le support InnoDB?

11voto

Matthew Franglen Points 1686

Si vous utilisez MySQL 5.6+ et que vous souhaitez désactiver InnoDB, n'oubliez pas "--default-tmp-storage" sinon cela ne fonctionnera pas :

Pour désactiver InnoDB, utilisez --innodb=OFF ou --skip-innodb. Dans ce cas, car le moteur de stockage par défaut est InnoDB, le serveur ne démarrera pas sauf si vous utilisez également --default-storage-engine et --default-tmp-storage-engine pour définir le moteur par défaut vers un autre moteur pour les tables permanentes et TEMPORARY.

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#option_mysqld_ignore-builtin-innodb

Vous pouvez ajouter ceci à votre fichier my.cnf :

[mysqld] 
innodb=OFF 
ignore-builtin-innodb 
skip-innodb
default-storage-engine=myisam 
default-tmp-storage-engine=myisam

juste pour être sûr que cela fonctionnera.

0 votes

+1, Ne jamais remarquer le document officiel. il devrait définir default-storage-engine et default-tmp-storage-engine, merci.

10voto

Wall Venker Points 11

Vérifiez votre journal d'erreurs mysql.

tail -100 /var/log/mysql/error.log

Si votre journal indique (comme le mien l'a fait) :

InnoDB: Initialisation du pool de mémoires tampons, taille = 128.0M
InnoDB: échec du mmap(137363456 octets); errno 12
\[ERROR\] InnoDB: Impossible d'allouer de la mémoire pour le pool de mémoires tampons

Vous n'avez pas suffisamment de mémoire pour utiliser la taille de mémoire tampon par défaut de 128M

Modifiez le fichier de configuration /etc/mysql/my.cnf en ajoutant une ligne pour spécifier une taille de innodb_buffer_pool_size plus petite.

# réduire la taille du pool de mémoires tampons à moins de 128M car nous n'avons que 1 Go de RAM au total
innodb_buffer_pool_size = 16M

Enregistrez le fichier de configuration, et démarrez mysql

sudo service mysql start

0 votes

Est bien ici. Mais cela pourrait également être des processus en attente du serveur web ou quelque chose qui utilise toute la RAM, veuillez également vérifier cela.

0voto

Ben Racicot Points 124

J'ai obtenu cette erreur lorsque j'ai supprimé l'emplacement que j'utilise pour tmpdir. Si vous avez récemment modifié votre tmpdir, vous voudrez peut-être vérifier qu'il s'agit d'un emplacement valide et inscriptible.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X