web-dev-qa-db-fra.com

Récupérer de l'espace disque après avoir supprimé la base de données dans mysql

J'ai créé de très grandes bases de données et j'en ai depuis supprimé quelques-unes. J'ai remarqué que mon espace disque n'avait pas récupéré autant que je m'y attendais. Par exemple, la dernière base de données que j'ai ajoutée a utilisé tout mon espace libre et a été abandonnée, j'ai donc abandonné ce schéma. Avant cela, j'avais 12,4 Go de libre, maintenant je n'ai que 7,52 Go de libre.
Que se passe t-il ici? Comment récupérer mes ~ 5 Go?

23
VenerableAgents

De http://dev.mysql.com/doc/refman/5.1/en/innodb-data-log-reconfiguration.html :

Actuellement, vous ne pouvez pas supprimer un fichier de données de l'espace disque logique. Pour diminuer la taille de votre espace disque logique, utilisez cette procédure:

  1. Utilisez mysqldump pour vider toutes vos tables InnoDB.

  2. Arrêtez le serveur.

  3. Supprimez tous les fichiers d'espace disque logique existants, y compris les fichiers ibdata et ib_log. Si vous souhaitez conserver une copie de sauvegarde des informations, copiez tous les fichiers ib * vers un autre emplacement avant de supprimer les fichiers de votre installation MySQL.

  4. Supprimez tous les fichiers .frm des tables InnoDB.

  5. Configurez un nouvel espace de table.

  6. Redémarrez le serveur.

  7. Importez les fichiers de vidage.

Innodb crée un système de fichiers (le "tablespace") dans les fichiers de données eux-mêmes. Il ne "rétrécit" jamais les fichiers de données lorsque les données sont supprimées, car la réorganisation des données dans le fichier pourrait être coûteuse (il n'y a aucune garantie que les données supprimées étaient à la fin, voire contiguës). En recréant la base de données comme décrit ci-dessus, il rend le fichier aussi volumineux que nécessaire pour toutes les données, mais pas plus gros.

22
Chris Morgan