22
May/08
1

Modifier le innodb_log_file_size

Je me suis déjà fait avoir 2 fois par cette option. Si vous avez des tables InnoDB avec un gros load d’écriture (insert, update), il est généralement recommandé d’avoir un innodb_log_file_size assez élevé. Mais soyez vigilant: plus la grosseur du log file est élévée, plus le temps de recovery est long dans le cas d’un crash.

Mais peu importe. Là ou je veux en venir, c’est sur la manière de modifier cette option. InnoDB est un engine capricieux et innodb_log_file_size est l’un de ses caprices. Les logs jouent un rôle très important dans plusieurs concepts d’InnoDB. Il y stock un tas d’information comme le schema de certains .frm et d’autres metadata. Le problème est qu’on ne peut pas simplement modifier la grosseur du log dans le my.cnf et repartir le serveur. En fait oui, c’est possible et le serveur ne fera pas d’erreur. Mais aucune table InnoDB ne sera utilisable.

La manière de faire est relativement simple.

  • On s’assure que la variable innodb_fast_shutdown ne vaut pas 2.
    • Si la valeur de innodb_fast_shutdown est 2, il faut la changer pour 1, arrêter le serveur, le repartir, et l’arrêter de nouveau. Ceci permet à InnoDB de fermer correctement.
  • On arrêtele serveur
  • On modifie la configuration
  • On renomme le fichier log lui-même
  • On repart le serveur

En renommant le fichier, MySQL va recréer un nouveau log avec la nouvelle grosseur spécifiée dans la configuration au redémarrage. Si tout se déroule bien, on peut supprimer l’ancien log qu’on a renommé. Parcontre, si quelque chose tourne mal, il est possible de remettre l’ancienne valeur de innodb_log_file_size, deleter le nouveau log file et remettre l’ancien qui a été renommé.

InnoDB s’attend à toujours avoir un log de la même grosseur. En modifiant l’option, la grosseur spécifiée dans la configuration et la grosseur réelle du fichier ne concorde plus. C’est pour cette raison que nous devons en recréer un tout neuf, avec la bonne grosseur.

Si comme moi, vous avez oublié de renommer l’ancien log file, MySQL ne vous indiquera pas que c’est le innodb_log_file_size qui est le problème. Vous aurez tout simplement des erreurs lorsque vous tenterez d’accéder ou écrire dans une table InnoDB.

Tagged as:
Comments (1) Trackbacks (0)
  1. Guillaume M.
    8:14 am on August 18th, 2010

    Merci pour ce billet très utile, … et en français ! :)

    En ce qui concerne le point 4, j’ajoute qu’il est question de renommer le ou les fichiers constituant le buffer InnoDB de MySQL. Ces fichiers se nomment ib_logfile0, ib_logfile1, … (sous debian par défaut).

    Donc renommez ces fichiers, modifiez votre conf MySQL, et si le serveur ne repart pas, pensez à jeter un oeil au syslog. ;)

    PS : avant toute manipulation, je vous recommande très vivement de procéder à une sauvegarde intégrale de vos bases de données.

Leave a comment

No trackbacks yet.