Je recommande de stocker les tables InnoDB dans des fichiers séparés, un fichier par table. Il est ainsi plus facile de les gérer et de voir quelles tables prennent le plus de place. Mettez les éléments suivants dans /etc/mysql/my.cnf (ou à l'endroit où il se trouve sur votre système) [mysqld] section :
innodb_file_per_table
Il est ensuite facile d'identifier les tables qui utilisent trop d'espace. Vous devez ensuite recréer les tables problématiques périodiquement (une fois par jour, une fois par mois, etc.) en procédant comme suit :
ALTER TABLE tablename ENGINE=InnoDB;
Cela prendra un certain temps pour les grandes tables. Il recréera les fichiers de table à partir de zéro, ce qui permettra de se débarrasser de la fragmentation et des trous qui augmentent la taille des fichiers. Lorsque ALTER TABLE est en cours d'exécution, il utilise le double de la capacité de disque nécessaire. Je ne suis pas sûr que vous puissiez faire cela à moins que vous ne fonctionniez en mode "fichier par table".
UPDATE
Je voulais ajouter que pour se débarrasser du "fichier unique pour toutes les tables" gonflé existant InnoDB ibdata1 vous devez procéder comme suit :
- exporter toutes les tables InnoDB avec mysqldump
- shutdown mysqld
- ajoutez la ligne "innodb_file_per_table" dans votre my.cnf
- rm ibdata* ib_logfile* dans votre répertoire de données mysql
- démarrer mysqld
- importer les données que vous avez sauvegardées à l'étape 1