web-dev-qa-db-fra.com

Moteur de table inconnu 'InnoDB'

Récemment, j'ai découvert que je peux maximiser les performances de mysql quand j'ai un bon matériel. Depuis que j'utilise InnoDB, j'ai ajouté une configuration supplémentaire dans my.ini

Voici les configurations nouvellement ajoutées:

innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 2G
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 120

Ensuite, je redémarre tous les services. Mais lorsque j'ai utilisé mon programme, une erreur s'est produite "Moteur de table inconnu 'InnoDB'".

Ce que j'ai essayé de résoudre ce problème:

  1. Je supprime le fichier journal pour redémarrer le service mais j'ai toujours l'erreur.
24
rechie

D'autres solutions n'ont pas résolu mon problème. Le moteur InnoDB a été désactivé après avoir ajusté la configuration.

La suppression des fichiers journaux ib_ * borked dans le répertoire de données mysql a résolu mon problème et m'a permis d'utiliser le pool de mémoire tampon 2G pour InnoDB: http://www.turnkeylinux.org/forum/support/20090111/drupal-6-problem -enable-innodb # comment-131

20
aaronbauman

Je viens de réessayer de supprimer le fichier journal et de redémarrer les services, et cela fonctionne! Mais méfiez-vous d'attribuer 2G car innodb peut ne pas compiler, veuillez utiliser 1G si 2G ne fonctionne pas.

11
rechie

J'ai également rencontré ce problème. Le problème était que j'allouais plus de mémoire à InnoDB que le serveur n'en avait avec la variable innodb_buffer_pool_size. MySQL ne s'est pas plaint de ne pas pouvoir allouer la mémoire dans ses journaux à ce sujet.

8
Sean McCleary

J'ai essayé tous ceux-là (et bien d'autres) mais la seule méthode qui a fonctionné pour moi est:

  • Arrêter le serveur MySql
    /etc/init.d/mysql stop
  • Supprimer les fichiers journaux
    rm ib_logfile0 ib_logfile1
  • Renommez le fichier InnoDB (si rien d'autre ne fonctionne car il sera recréé) mv ibdata1 old_ibdata1
  • J'ai cette configuration dans /etc/mysql/my.cnf -> Même si vous ne le spécifiez pas, MySql utilisera les valeurs par défaut.

    [mysqld]
    datadir=/data/mysql/data
    socket=/var/run/mysqld/mysqld.sock
    
    #Not a must to define the following
    innodb_log_file_size=1G
    innodb_file_per_table=1
    innodb_flush_method=O_DIRECT
    innodb_buffer_pool_size=1G
    innodb_data_file_path=ibdata1:10M:autoextend
    innodb_lock_wait_timeout=18000
    
  • Démarrez MySql Server
    /etc/init.d/mysql start

4
biniam

Une autre option que vous avez si vous modifiez complètement votre fichier my.cnf est de le remplacer par une configuration par défaut à partir de l'installation de mysql. Pour linux:

Vous avez les options suivantes,

/usr/share/mysql/my-huge.cnf
/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-small.cnf

Voici un exemple pour l'installer:

#backup original config
mv /etc/my.cnf{,.bak}

#copy new my.cnf from template
cp /usr/share/mysql/my-large.cnf /etc/my.cnf

Plus d'informations sur ces options sont disponibles sur http://dev.mysql.com/doc/mysql/en/option-files.html

1
ChrisN

Eu ce problème lors de la restauration à partir de la sauvegarde. Le problème était que j'avais des paramètres un peu différents dans my.ini. Donc, si quelqu'un rencontre ce problème, assurez-vous de définir les mêmes paramètres (copiez my.ini), arrêtez le service MySQL, puis restaurez l'ensemble du dossier de données, puis redémarrez le service MySQL.

0
Nux