InnoDB: Erreur: le fichier journal ./ib_logfile0 est de taille différente

106

Je viens d'ajouter les lignes suivantes dans /etc/mysql/my.cnf après avoir converti une base de données pour qu'elle utilise le moteur InnoDB.

innodb_buffer_pool_size = 2560M
innodb_log_file_size    = 256M
innodb_log_buffer_size  = 8M
innodb_flush_log_at_trx_commit  = 2
innodb_thread_concurrency   = 16
innodb_flush_method = O_DIRECT

Mais il déclenche une erreur "ERREUR 2013 (HY000) à la ligne 2: connexion perdue avec le serveur MySQL lors d'une requête" lors du redémarrage de mysqld. Et le journal des erreurs mysql montre ce qui suit

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!
100118 20:52:52 [ERROR] Plugin 'InnoDB' init function returned error.
100118 20:52:52 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
100118 20:52:52 [ERROR] Unknown/unsupported table type: InnoDB
100118 20:52:52 [ERROR] Aborting

Alors j'ai commenté cette ligne

# innodb_log_file_size  = 256M

Et il a redémarré mysql avec succès.

Je me demande quelle est la "5242880 octets du fichier journal" montré dans l'erreur mysql? C'est la première base de données sur le moteur InnoDB sur ce serveur. Où et quand ce fichier journal est-il créé? Dans ce cas, comment puis-je activer la directive innodb_log_file_size dans my.cnf?

MODIFIER

J'ai essayé de supprimer / var / lib / mysql / ib_logfile0 et de redémarrer mysqld mais cela a quand même échoué. Il affiche maintenant ce qui suit dans le journal des erreurs.

100118 21:27:11  InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 256 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200
InnoDB: Error: log file ./ib_logfile1 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!

Résolution

Cela fonctionne maintenant après avoir supprimé ib_logfile0 et ib_logfile1 dans / var / lib / mysql

jack
la source

Réponses:

121

InnoDB est incroyablement difficile en ce qui concerne sa configuration; si quelque chose ne va pas, il ne vous reste plus qu'à abandonner et à rentrer chez vous. Pour modifier la taille du fichier journal sans perte de données:

  1. Annulez toutes les modifications de configuration apportées à la taille du fichier journal et relancez MySQL.
  2. Dans votre version de MySQL: SET GLOBAL innodb_fast_shutdown = 0;
  3. Arrêtez MySQL
  4. Modifiez la configuration en fonction de la taille du fichier journal.
  5. Supprimer les deux fichiers journaux.
  6. Démarrez MySQL. Il se plaindra du manque de fichiers journaux, mais il les créera et tout ira bien.
femme
la source
1
Bonjour, merci pour votre réponse, j'ai essayé votre méthode mais j'ai toujours échoué.
Jack
44
Supprimer ib_logfile0 et ib_logfile1 a résolu le problème pour moi.
Temnovit
1
Et pour moi. Merci beaucoup, nous avons notre wiki de retour!
Stephen Kennedy
1
Depuis que je déplace une base de données nouvellement installée, je saute les étapes 1 à 4 et commence par 5 - et ça marche :)
Limbo Peng
Merci @Temnovit de supprimer ces 2 fichiers a également fait l'affaire pour moi.
Bashan