L' PURGE BINARY LOGS
instruction supprime tous les fichiers journaux binaires répertoriés dans le fichier d'index de journaux avant le nom de fichier journal ou l'horodatage 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'à l' mysql-bin.000019
aide de 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 des journaux binaires 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 manières principales:
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), alors qu'il PURGE BINARY LOGS
peut être utilisé en toute sécurité pendant que les esclaves de réplication sont en cours d'exécution.
CAVEAT par RolandoMySQLDBA
Si vous exécutez RESET MASTER
avec des esclaves connectés et en cours d'exécution, le fil d'E / S de chaque esclave perdra immédiatement sa place. La réplication est donc interrompue et vous devrez passer du temps à récupérer à nouveau les données de tous les esclaves. 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:
- Exécutez
SHOW SLAVE STATUS\G
sur chaque esclave.
- Prenez note de
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).
- À partir de tous les affichages de
SHOW SLAVE STATUS\G
, déterminez lequel Relay_Master_Log_File
est le plus ancien (par exemple, 'mysql-bin.00123').
- Vous pouvez exécuter
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.
CHANGE MASTER TO
, il supprime tous les journaux de relais. Si telRelay_Master_Log_file
est le casmysql-bin.00123
, il s'agit du plus ancien journal binaire du maître que l'esclave connaît. S'ilmysql-bin.00123
n'existe plus sur le maître, vous risquez de perdre l'emplacement approprié pour la réplication si vous en exécutez unCHANGE MASTER TO
sur l'esclave qui ne fait pas référence à des journaux plus récents. Cela peut facilement être ignoré et vous finissez par interrompre manuellement la réplication.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é.À la fin, 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.la source
PURGE LOGS
que cela ne fonctionne que sous la configuration idéale: 1) lorsque tous les journaux binaires sont consécutifs, 2) tous les journaux binaires sont nommés dans lemysql-bin.index
fichier, 3) Il n'y a pas de journaux supplémentaires non mentionnés dansmysql-bin.index
. +1 !!!Dans mon cas, je
PURGE BINARY
ne supprimais 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 suffisamment 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 lignelog-bin=mysql-bin
(ce n'était pas 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 attente qui empêchaientPURGE BINARY
d'être exécutées).Après cela, j'ai couru
PURGE BINARY
mais il ne s'est rien passé. J'ai donc lu le manuel et j'ai découvert que:Alors je réactivées
log-bin=mysql-bin
dans mes/etc/my.cnf
, remis en marche, purgés les fichiers (avec succès maintenant), a commenté la ligne à nouveau, puis redémarré. Après cela, les fichiers ont été supprimés et ne sont plus créés.la source
Cela fonctionne pour moi: (version du serveur MySQL: 5.6.14)
Supprime tous les journaux binaires de mon système.
la source
Vous pouvez facilement supprimer TOUS les journaux avec:
Ou remplacez func NOW () par n'importe quelle date entre guillemets:
Ou vous pouvez automatiser cette action avec
expire_logs_days = 10
my.cnf. Par défaut expire_logs_days est 0 = ne jamais supprimer les journaux.( source )
la source