2010-04-15 5 views
8

Mon fichier ibdata1 pour la base de données MySQL est passé à environ 32 Go au fil du temps. Récemment, j'ai supprimé environ 10 Go de données de mes bases de données (et redémarré mysql pour faire bonne mesure), mais le fichier ne sera pas réduit. Est-il possible de réduire la taille de ce fichierLe fichier de données MySQL ne rétrécit pas

Répondre

11

La taille de fichier des tablespaces InnoDB ne sera jamais réduite automatiquement, quelle que soit la quantité de données supprimées.

Qu'est-ce que vous pourriez faire, bien qu'il soit beaucoup d'efforts, est de créer un espace de table pour chaque table en mettant

innodb_file_per_table 

La longue partie à ce sujet est que vous devez exporter toutes les données de la serveur MySQL (mise en place d'un nouveau serveur serait plus facile), puis réimporter les données. Au lieu d'un seul fichier ibdata1 qui contient les données pour chaque table, vous trouverez un grand nombre de fichiers appelés tablename.ibd qui ne contiennent les données que pour une seule table.


Après:

Lorsque vous supprimez ensuite un grand nombre de données à partir de tables, vous pouvez laisser mysql recréer le fichier de données en émettant

alter table <tablename> engine=myisam; 

pour passer à MyISAM (et ont le Fichier de données InnoDB pour cette table supprimé) puis

alter table <tablename> engine=innodb; 

pour recréer la table.

4

À moins que vous définissez innodb_file_per_table, ibdata1 détient toutes InnoDB tables, plus undo.

Ce fichier ne se rétrécit jamais.

Pour rétrécir, vous devriez (à vos propres risques):

  • sauvegarde et déposez tousInnoDB tables dans toutes bases de données
  • Supprimer le fichier manuellement
  • Réinitialiser le stockage InnoDB (en redémarrant mysqld) et
  • Restaurez les tables à partir de la sauvegarde.

Si vous définissez innodb_file_per_table, vous aurez encore à faire pour récupérer l'espace, mais dans ce cas, vous serez en mesure de le faire sur une base par table, sans affecter les autres tables.

Notez que l'annulation est toujours maintenue dans ibdata, même avec innodb_file_per_table ensemble.

Questions connexes