Maison >base de données >tutoriel mysql >Comment puis-je nettoyer efficacement un moteur de stockage InnoDB sans reconstruire l'intégralité de la base de données ?

Comment puis-je nettoyer efficacement un moteur de stockage InnoDB sans reconstruire l'intégralité de la base de données ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-06 22:03:15751parcourir

How Can I Effectively Clean an InnoDB Storage Engine Without Rebuilding the Entire Database?

Nettoyer un moteur de stockage InnoDB : un guide

Dans le domaine de la maintenance des bases de données, la question de savoir comment purger les données obsolètes d'un InnoDB Le moteur de stockage apparaît fréquemment.

InnoDB peut-il être nettoyé sans Reconstruction ?

Malheureusement, contrairement à MyISAM, il n'est pas possible de supprimer directement les données supprimées d'un moteur InnoDB sans reconstruire l'intégralité de la base de données. En effet, InnoDB utilise une infrastructure complexe qui stocke différents types d'informations dans son fichier ibdata1, notamment des données de table, des index et des métadonnées. La simple optimisation des tables ne fera que consolider les données dans ibdata1, pas les réduire.

Nettoyage de l'infrastructure InnoDB

Pour nettoyer efficacement un moteur InnoDB, une approche plus complète est nécessaire :

  1. Vider les données et supprimer les bases de données : Exporter toutes les données dans un fichier SQL et supprimez toutes les bases de données non essentielles (à l'exclusion de mysql et information_schema).
  2. Flush Transactions and Shutdown MySQL : Configurez innodb_fast_shutdown sur 0 pour un vidage complet des transactions, puis arrêtez MySQL.
  3. Modifier mon.cnf : Activer innodb_file_per_table, configurez innodb_flush_method sur O_DIRECT, définissez innodb_log_file_size à 25 % de innodb_buffer_pool_size et augmentez innodb_buffer_pool_size.
  4. Supprimez ibdata et ib_logfile : Supprimez ces fichiers, y compris éventuellement tous les sous-répertoires à l'exception de /var/lib/mysql/mysql.
  5. Démarrez MySQL : Recréez ibdata1 et ib_logfile0/1.
  6. Importer des données : Restaurer le dump SQL pour le remplir les fichiers de base de données nouvellement créés.

Remarques :

  • En activant innodb_file_per_table, chaque table InnoDB résidera dans son propre fichier .ibd en dehors d'ibdata1 , simplifiant l'optimisation et la suppression des données à l'avenir.
  • Restaurez les fichiers de schéma MySQL si une erreur se produit en raison de la suppression d'un schéma MySQL.

Avec ce processus, le nouveau fichier ibdata1 ne contiendra que des métadonnées de table, réduisant considérablement sa taille et garantissant un environnement InnoDB propre pour le stockage des données actives.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn