Pour éviter ce problème de fichiers faisant plusieurs giga il existe deux directives à utiliser selon votre installation et vos besoins.

  • innodb_file_per_table
  • innodb_file_per_database

Ce qu'il faut savoir c'est que ces fichiers ibdata ne diminue jamais tout seul même si la base ou la table concernée est nettoyée.

Si vous désirez gagner de la place disque le mieux est de recréer la table qui pose problème (sauvegarde puis injection). La fonction OPTIMIZE TABLE fait ça très bien.

Pour régler ce souci (éviter les fichiers de plusieurs giga) voici les manipulations qu'il faut effectuer :

  • Arrêter votre serveur Mysql
  • Faire une sauvegarde mysqldump
  • Supprimer le fichier ou les fichiers ibdataX
  • Ajouter innodb_file_per_table ou innodb_file_per_database dans votre my.cnf
  • Redémarrer votre serveur Mysql
  • Injecter la sauvegarde mysqldump

Préférez innodb_file_per_database à innodb_file_per_table si vous avez beaucoup d'inserts, deletes et updates.

Pour optimiser votre moteur InnoDB vous pouvez jouer sur l'option innodb_buffer_pool_size dans votre my.cnf qui définie la taille du buffer mémoire qu'InnoDB utilise pour mettre en cache les données, index des tables etc...

Cela diminuera les accès au disque.

Si vous avez d'autres astuces pour la gestion et l'optimisation de Mysql n'hésitez pas !