Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment réduire/purger le fichier ibdata1 dans MySQL

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 :

  1. Faire un mysqldump de toutes les bases de données, procédures, déclencheurs etc sauf le mysql et performance_schema bases de données
  2. Supprimer toutes les bases de données sauf les 2 bases de données ci-dessus
  3. Arrêter mysql
  4. Supprimer ibdata1 et ib_log fichiers
  5. Démarrer mysql
  6. 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 .