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


45

J'ai récemment mis à jour Precision depuis l'ancienne LTS Ubuntu et maintenant, mysql refuse de démarrer. Lorsque je tente de le démarrer, il se plaint de ce qui suit:

╰$ sudo service mysql restart
stop: Unknown instance:
start: Job failed to start

Et cela apparaît dans "/var/log/mysql/error.log":

120415 23:01:09 [Note] Plugin 'InnoDB' is disabled.
120415 23:01:09 [Note] Plugin 'FEDERATED' is disabled.
120415 23:01:09 [ERROR] Unknown/unsupported storage engine: InnoDB
120415 23:01:09 [ERROR] Aborting

120415 23:01:09 [Note] /usr/sbin/mysqld: Shutdown complete

J'ai vérifié les permissions sur tous les répertoires mysql pour m'assurer qu'ils étaient bien possédés et j'ai également renommé ibilogs afin qu'il puisse les refaire. Je n’obtiens tout simplement aucune réponse à ce problème après avoir consulté les résultats de Google pendant 2 heures.


Incidemment, j'ai réussi à faire tourner mysql en commentant l'entrée "skip_innodb" dans my.cnf. Mais je suis presque certain que je n'étais pas supposé résoudre ce problème de cette façon.
Garrett

S'il vous plaît montrer toutes les variables de my.cnf qui sont des paramètres innodb
RolandoMySQLDBA

Réponses:


34

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

[ERROR] Unknown/unsupported storage engine: 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.


7
la rmcommande est utilisée pour supprimer des fichiers plutôt que de les renommer pour autant que je sache ...
Itai Ganot

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

Non, le ibdatafichier contient les données (sauf si vous avez un fichier par table). Les fichiers ib_logfile sont les journaux de relecture contenant les données des transactions de modification de base de données éventuellement en cours de traitement lorsque / si la base de données s'est écrasée. Si vous avez réussi à arrêter le serveur, la suppression de ces fichiers journaux ne vous fera pas de mal. S'il s'est écrasé, vous en avez besoin. Mais c'est une réponse valable. Si votre fichier my.cnf modifie l'option innodb_log_file_size et qu'il ne correspond plus à ces deux fichiers, vous obtiendrez le message d'erreur que l'OP indique. Supprimer / déplacer afin que de nouveaux puissent être corrigés.
Safado

2
Pourquoi les modifications ne peuvent être apportées que pendant 5 minutes me dépasse ... J'aurais dû préciser qu'il s'agit d'un correctif potentiel pour l'erreur susmentionnée. Comme indiqué par l'OP, ce n'était pas la solution qu'il avait besoin.
Safado

1
Vous pouvez toujours les renommer, par exemple mv ib_logfile0 ib_logfile0.bak && mv ib_logfile1 ib_logfile1.bak.
Kenorb

23

Si vous avez réellement besoin skip-innodb(cas d'utilisation: faible empreinte mémoire), vous n'avez évidemment pas à le commenter. Cependant, si InnoDB est le moteur de stockage par défaut, le serveur ne pourra pas démarrer tant que vous ne lui indiquerez pas le moteur de stockage à utiliser à la place, par exemple default-storage-engine=myisampour MyISAM.

Alors, essayez ceci:

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

6
Essayez d’ajouter «default-storage-engine = myisam» à /etc/mysql/my.cnf dans la section [mysqld] si vous voulez avoir «skip_innodb».
Code

Fonctionne à merveille. À votre santé!
Boann

4
Que faire si vous voulez innodb-support?
Nilzor

1
Mariadb sur Centos 7 ajouté dans default-storage-engine=myisamle fichier /etc/my.cnf sous [mysqld]. Cela a fait le tour. Merci
Damodar Bashyal

12

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

Pour désactiver InnoDB, utilisez --innodb = OFF ou --skip-innodb. Dans ce cas, étant donné que 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 comme autre moteur par défaut Tables temporaires.

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

Vous pouvez ajouter ceci à votre my.cnf:

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

juste pour m'assurer que ça va marcher.


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

7

Vérifiez votre journal d'erreur mysql.

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

Si votre journal dit (comme le mien):

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

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

Editez le fichier de configuration /etc/mysql/my.cnf en ajoutant une ligne pour spécifier un plus petit innodb_buffer_pool_size.

# make the buffer pool smaller than 128M since we only have 1 GB of total RAM
innodb_buffer_pool_size = 16M

Enregistrez le fichier de configuration et démarrez mysql

sudo service mysql start

Est sur place ici. Mais cela pourrait aussi être un processus suspendu du serveur Web ou quelque chose qui dévale la RAM, vérifiez-le aussi.
Sjas

0

Essayez encore 2 choses. 1. Réduisez la taille du pool de mémoire tampon innodb. 2. Modifiez le script initial mysql et ajoutez l'option --innodb.

Je me demande aussi si votre paquet est buggy. Pourriez-vous essayer une version mineure différente?

De plus, je suppose que votre serveur mysql a également été mis à niveau? Peut-être que cette version est cassée? La précision n'est pas encore définitive.


Déjà fait cela, sans effet.
Garrett

Désolé, édité avec quelques choses à essayer, plus comme un mauvais paquet. Essayez d’utiliser la version mysql.com ou percona qui sont généralement plus stables.
johnshen64

Assurez-vous également que l'ancien paquet est complètement purgé, une fois le nouveau installé.
johnshen64

La purge du package entraînerait-elle une perte des informations de la base de données?
Garrett

Ne devrait pas, mais pour être sûr, vous devriez toujours sauvegarder votre DBS.
johnshen64

0

J'ai eu cette erreur lorsque j'ai supprimé l'emplacement que j'utilise tmpdir. Si vous avez récemment changé votre tmpdir, vous voudrez peut-être vérifier qu'il s'agit d'un emplacement valide, accessible en écriture.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.