Ce ibdata1
ne rétrécit pas est une fonctionnalité particulièrement ennuyeuse de MySQL. Le ibdata1
le fichier ne peut pas être réduit à moins que vous supprimiez toutes les bases de données, supprimiez 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 séparé. De cette façon ibdata1
ne grossira pas autant. Selon Commentaire de Bill Karwin ceci est activé par défaut à partir de la version 5.6.6 de MySQL.
Il y a peu de temps je l'ai fait. Cependant, pour configurer votre serveur afin qu'il utilise des fichiers séparés pour chaque table, vous devez modifier my.cnf
pour activer ceci :
[mysqld]
innodb_file_per_table=1
https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html
Comme vous souhaitez récupérer l'espace de ibdata1
vous devez en fait supprimer le fichier :
- Faire un
mysqldump
de toutes les bases de données, procédures, déclencheurs etc sauf lemysql
etperformance_schema
bases de données - Supprimer toutes les bases de données sauf les 2 bases de données ci-dessus
- Arrêter mysql
- Supprimer
ibdata1
etib_log
fichiers - Démarrer mysql
- Restauration à partir du vidage
Lorsque vous démarrez MySQL à l'étape 5, le ibdata1
et ib_log
les fichiers seront recréés.
Maintenant, vous êtes prêt à partir. Lorsque vous créez une nouvelle base de données pour analyse, les tables seront situées dans des ibd*
distincts fichiers, pas dans ibdata1
. Comme vous supprimez généralement la base de données peu de temps après, le ibd*
les fichiers seront supprimés.
http://dev.mysql.com/doc/refman /5.1/fr/drop-database.html
Vous avez probablement vu ceci :
http://bugs.mysql.com /bug.php?id=1341
En utilisant la commande ALTER TABLE <tablename> ENGINE=innodb
ou OPTIMIZE TABLE <tablename>
on peut extraire des données et indexer des pages d'ibdata1 dans des fichiers séparés. Cependant, ibdata1 ne diminuera pas à moins que vous suiviez les étapes ci-dessus.
Concernant le information_schema
, qu'il n'est pas nécessaire ni possible de supprimer. Il s'agit en fait d'un ensemble de vues en lecture seule, pas de tables. Et aucun fichier n'y est associé, pas même un répertoire de base de données. Le informations_schema
utilise le moteur de base de données 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
.