J'ai utilisé PURGE BINARY LOGS ainsi que FLUSH LOGS, mais le répertoire mysql contient toujours ces fichiers:
mysql-bin.000025
mysql-bin.000024
mysql-bin.000023
mysql-bin.000022
mysql-bin.000021
mysql-bin.000020
mysql-bin.000019
mysql-bin.index
Y a-t-il une raison pour laquelle l'utilisation des commandes ne fonctionne pas? Ces fichiers prennent beaucoup de place. Je voudrais m'en débarrasser en toute sécurité.
Le PURGE BINARY LOGS
l'instruction supprime tous les fichiers journaux binaires répertoriés dans le fichier d'index des journaux avant le nom ou l'horodatage du fichier journal spécifié. Les fichiers journaux supprimés sont également supprimés de la liste enregistrée dans le fichier d'index, de sorte que le fichier journal donné devient le premier de la liste.
J'espère que vous avez purgé les journaux binaires jusqu'à mysql-bin.000019
en utilisant la commande
PURGE BINARY LOGS TO 'mysql-bin.000019';
Si vous devez purger tous les journaux, faites comme
PURGE BINARY LOGS TO 'mysql-bin.000025';
Cela supprimera les journaux binaires jusqu'à mysql-bin.000025
.
[~ # ~] mise à jour [~ # ~]
Tu peux essayer
RESET MASTER;
RESET MASTER
Supprime tous les fichiers journaux binaires répertoriés dans le fichier d'index, réinitialise le fichier d'index du journal binaire pour qu'il soit vide et crée un nouveau fichier journal binaire
Les effets de RESET MASTER
diffèrent de ceux de PURGE BINARY LOGS de 2 façons:
RESET MASTER
supprime tous les fichiers journaux binaires répertoriés dans le fichier d'index, ne laissant qu'un seul fichier journal binaire vide avec un suffixe numérique de .000001, tandis que la numérotation n'est pas réinitialisée par PURGE BINARY LOGS.
RESET MASTER
n'était pas destiné à être utilisé pendant l'exécution d'esclaves de réplication. Le comportement de RESET MASTER
lorsqu'il est utilisé pendant que les esclaves sont en cours d'exécution n'est pas défini (et donc non pris en charge), tandis que PURGE BINARY LOGS
peut être utilisé en toute sécurité pendant l'exécution des esclaves de réplication.
Si vous exécutez RESET MASTER
avec les esclaves connectés et en cours d'exécution, le thread IO de chaque esclave perdra immédiatement sa place. La réplication est donc interrompue et vous devrez passer du temps à récupérer les données de tous les esclaves à nouveau synchronisés) Si vous souhaitez supprimer en toute sécurité les journaux binaires d'un maître sans rompre l'intégrité de la réplication, voici ce que vous faites:
SHOW SLAVE STATUS\G
sur chaque esclave.Relay_Master_Log_File
. Il s'agit du journal binaire dont la dernière instruction a été exécutée avec succès dans l'esclave).SHOW SLAVE STATUS\G
, déterminez Relay_Master_Log_File
est le plus ancien (par exemple, 'mysql-bin.00123').PURGE BINARY LOGS TO 'mysql-bin.00123';
Aucun des esclaves ne perdra sa place.L'effet global? Cela laissera des journaux binaires sur le maître dont les instructions n'ont pas encore été exécutées sur tous les esclaves.
Je ne sais pas si c'est ce qui vous est arrivé, mais dans mon cas, MySQL avait cessé de "cycler" les journaux et le fichier mysql-bin.index était devenu "corrompu" avec des entrées de fichier binlog invalides.
Plus précisément, le fichier d'index avait commencé à mysql-bin.000001 et était arrivé à mysql-bin.000220 mais avait ensuite repris en quelque sorte à partir de 001. Lorsque j'ai comparé cela aux fichiers sur mon serveur, j'ai pu voir que j'avais des fichiers de 001 à 022.
Au début, j'ai essayé PURGE LOGS TO 'mysql-bin.000022';
mais cela n'a pas fonctionné.
Finalement, j'ai arrêté MySQL et modifié manuellement le fichier d'index jusqu'à ce qu'il corresponde aux fichiers que j'avais sur mon serveur. Lorsque j'ai redémarré MySQL, il a nettoyé les fichiers binlog pour respecter le expire_logs_days
paramètre et a recommencé à fonctionner normalement.
Dans mon cas PURGE BINARY
ne supprimait simplement rien.
J'avais ma partition à 100% d'utilisation (j'ai dû nettoyer un peu mon journal de requêtes lentes pour qu'il y ait assez d'espace pour que mysql soit redémarré), donc la première chose que j'ai faite a été de changer /etc/my.cnf
pour commenter la ligne log-bin=mysql-bin
(il n'était plus nécessaire sur ce serveur et j'avais oublié de le supprimer), puis j'ai redémarré mysql (cela était nécessaire car il y avait des requêtes en file d'attente qui empêchaient PURGE BINARY
d'être exécuté).
Après cela, j'ai couru PURGE BINARY
mais rien ne s'est passé. J'ai donc lu le manuel et j'ai découvert que:
Cette instruction n'a aucun effet si le serveur n'a pas été démarré avec l'option --log-bin pour activer la journalisation binaire.
J'ai donc réactivé log-bin=mysql-bin
dans mon /etc/my.cnf
, redémarré, PURGE les fichiers (avec succès maintenant), commente à nouveau la ligne, puis redémarre. Après cela, les fichiers ont été supprimés et ne sont plus créés.
Cela fonctionne pour moi: (version du serveur MySQL: 5.6.14)
PURGE BINARY LOGS BEFORE NOW();
Supprime tous les journaux binaires de mon système.
Vous pouvez facilement supprimer [~ # ~] tous les journaux [~ # ~] avec:
PURGE BINARY LOGS BEFORE NOW();
Ou remplacez func NOW () par n'importe quelle date entre guillemets:
PURGE BINARY LOGS BEFORE '2018-02-15 00:00:00';
Ou vous pouvez automatiser cette action avec expire_logs_days = 10
dans my.cnf. Par défaut expire_logs_days est 0 = ne jamais supprimer les journaux.
( source )