Question Récupérer de l'espace disque après la suppression de la base de données Magento MySQL


J'avais besoin de récupérer de l'espace disque alors j'ai supprimé une ancienne base de données Magento de mon serveur. La taille de la base de données était d'environ 16 Go. J'ai été surpris de constater qu'une fois la base de données supprimée, elle ne libérait pas vraiment cet espace disque.

J'ai essayé de redémarrer le serveur MySQL, mais cela prend toujours cet espace.

Si cela compte, une base de données Magento utilise fortement innoDB.

Puis-je faire quelque chose pour récupérer cet espace disque?


5
2017-07-20 13:45


origine




Réponses:


J'ai écrit une procédure de nettoyage pour InnoDB dans StackOverflow

https://stackoverflow.com/a/4056261/491757 (29 octobre 2010)

C'est ici

Pour réduire ibdata1 une fois pour toutes, vous devez procéder comme suit:

1) MySQLDump toutes les bases de données dans un fichier texte SQL (appelez-le SQLData.sql)

2) Supprimer toutes les bases de données (sauf le schéma mysql)

3) arrêter mysql

4) Ajoutez les lignes suivantes à /etc/my.cnf

[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G

Note: Quel que soit votre jeu pour innodb_buffer_pool_size, assurez-vous innodb_log_file_size correspond à 25% de innodb_buffer_pool_size.

5) Supprimer ibdata1, ib_logfile0 et ib_logfile1

À ce stade, il ne devrait y avoir que le schéma mysql dans / var / lib / mysql

6) Redémarrez mysql

Cela recréera ibdata1 à 10 Mo, ib_logfile0 et ib_logfile1 à 1G chacun

7) Recharger SQLData.sql dans mysql

ibdata1 augmentera mais ne contiendra que des métadonnées de table

Chaque table InnoDB existera en dehors de ibdata1

Supposons que vous ayez une table InnoDB nommée mydb.mytable. Si vous allez dans / var / lib / mysql / mydb, vous verrez deux fichiers représentant la table

  • mytable.frm (en-tête de moteur de stockage)
  • mytable.ibd (Accueil de la table de données et index de table pour mydb.mytable)

ibdata1 ne contiendra plus jamais de données InnoDB ni d'index.

Avec l'option innodb_file_per_table dans /etc/my.cnf, vous pouvez exécuter OPTIMIZE TABLE mydb.mytable et le fichier /var/lib/mysql/mydb/mytable.ibd sera en fait réduit.

Je l'ai fait plusieurs fois dans ma carrière en tant que DBA MySQL

En fait, la première fois que j'ai fait cela, j'ai compressé un fichier ibdata1 de 50 Go en 500 Mo.

Essaie. Si vous avez d'autres questions à ce sujet, écrivez-moi. Croyez-moi. Cela fonctionnera à court terme et à long terme. !!!


8
2017-07-20 19:16



Cela vous dérangerait-il de le coller et de le coller ici? - Iain
@lain: Copié et collé à la demande - RolandoMySQLDBA
C'est génial - Iain


Actuellement, le seul moyen de récupérer l'espace utilisé par une base de données InnoDB supprimée est de vider toutes les bases de données, d'arrêter MySQL, de supprimer les fichiers de stockage sous-jacents, de redémarrer MySQL et enfin d'importer le vidage de la base de données.

La documentation MySQL a informations complémentaires à propos de ça.


1
2017-07-20 13:54