InnoDB est un moteur de stockage pour les systèmes de gestion de base de données MySQL et MariaDB.
Sur certaines versions du serveur MySQL toutes les bases de données sont stockées dans un seul et même fichier /var/lib/mysql/ibdata1. La taille de ce fichier augmente inexorablement et celui-ci ne peut être purgé. Il est pourtant possible de répartir le stockage dans plusieurs fichiers.
La solution suivante permet de paramétrer le serveur MySQL afin qu’il crée un fichier .ibd par table pour chacune des bases de données de /var/lib/mysql/. Chacun de ces fichiers pourra faire l’objet d’un nettoyage à chaud.
Mise en œuvre
La procédure s’applique uniquement aux modules EOLE 2.5. Sur les version 2.6 d’EOLE un fichier .ibd est créé par défaut pour chaque table.
Mise en œuvre à l’aide d’un script bash.
Pré-requis :
- les valeurs innodb_log_file_size et innodb_buffer_pool_size doivent être adaptées au serveur ;
- innodb_log_file_size doit être égal à 25% de la valeur du paramètre innodb_buffer_pool_size.
#!/bin/bash innodb_log_file_size=500M innodb_buffer_pool_size=2G MYSQLPWD=$(pwgen -1) mysql_pwd.py $MYSQLPWD DATABASES=`mysql -u root -p$MYSQLPWD -e 'use mysql; select Db from db where Db NOT IN ("performance_schema", "mysql","information_schema");' |awk '!/Db/ {print $NF}'|sort|uniq` mysqldump -hlocalhost -uroot -p$MYSQLPWD --databases $DATABASES > dump.sql for database in $DATABASES;do mysql -u root -p$MYSQLPWD -e "drop database $database;" done service mysql stop cat > /etc/mysql/conf.d/mysqld_innodb.cnf << EOF [mysqld] innodb_file_per_table innodb_flush_method=O_DIRECT innodb_log_file_size=${innodb_log_file_size} innodb_buffer_pool_size=${innodb_buffer_pool_size} EOF rm -f /var/lib/mysql/{ibdata1,ib_logfile0,ib_logfile1} service mysql start mysql -uroot -p $MYSQLPWD < dump.sql
Le répertoire /var/lib/mysql/[BDD] doit contenir un fichier .ibd et un fichier .frm par table.
Le script est disponible dans l’espace de contribution EOLE 2.5 : http://eole.ac-dijon.fr/documentations/2.5/contributions/ibdata.sh
Nettoyage des tables
L’exécution de la commande OPTIMIZE TABLE mabdd.<nomDeLaTable> permet de réduire la taille du fichier .ibd correspondant.