Cela ibdata1
ne rétrécit pas est une fonctionnalité particulièrement ennuyeuse de MySQL. Le ibdata1
fichier ne peut en fait être réduit que si vous supprimez toutes les bases de données, supprimez les fichiers et rechargez un vidage.
Mais vous pouvez configurer MySQL pour que chaque table, y compris ses index, soit stockée dans un fichier distinct. De cette façon ibdata1
, ne grandira pas autant. Selon le commentaire de Bill Karwin, cela est activé par défaut à partir de la version 5.6.6 de MySQL.
Il y a quelque temps, je l'ai fait. Cependant, pour configurer votre serveur pour utiliser des fichiers distincts pour chaque table, vous devez modifier my.cnf
afin d'activer ceci:
[mysqld]
innodb_file_per_table=1
http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html
Comme vous voulez récupérer de l'espace, ibdata1
vous devez supprimer le fichier:
- Faire une
mysqldump
de toutes les bases de données, procédures, déclencheurs, etc., à l'exception des bases de données mysql
etperformance_schema
- Supprimer toutes les bases de données à l'exception des 2 bases de données ci-dessus
- Arrêtez mysql
- Supprimer
ibdata1
et ib_log
fichiers
- Démarrez mysql
- Restaurer à partir du vidage
Lorsque vous démarrez MySQL à l'étape 5, les fichiers ibdata1
et ib_log
seront recréés.
Vous êtes maintenant prêt à partir. Lorsque vous créez une nouvelle base de données pour analyse, les tables seront situées dans des ibd*
fichiers séparés , pas dans ibdata1
. Comme vous déposez généralement la base de données peu de temps après, les ibd*
fichiers seront supprimés.
http://dev.mysql.com/doc/refman/5.1/en/drop-database.html
Vous l'avez probablement vu:
http://bugs.mysql.com/bug.php?id=1341
En utilisant la commande ALTER TABLE <tablename> ENGINE=innodb
ou OPTIMIZE TABLE <tablename>
on peut extraire les données et les pages d'index d'ibdata1 pour séparer les fichiers. Cependant, ibdata1 ne rétrécira que si vous effectuez les étapes ci-dessus.
En ce information_schema
qui concerne le , ce n'est pas nécessaire ni possible de laisser tomber. Il s'agit en fait d'un tas de vues en lecture seule, pas de tableaux. Et aucun fichier ne leur est associé, pas même un répertoire de base de données. Le informations_schema
utilise le moteur db de mémoire et est supprimé et régénéré lors de l'arrêt / redémarrage de mysqld. Voir https://dev.mysql.com/doc/refman/5.7/en/information-schema.html .