J'ai une paire de bases de données MySQL configurées pour la réplication Master Slave. L'esclave se porte bien.
Le maître, en revanche, a accumulé des journaux binaires malgré mes meilleurs efforts (automatisés).
J'essaie de configurer la variable 'expire_logs_days' dans le fichier my.cnf de MySQL, mais pour une raison quelconque, elle semble être ignorée. Mon fichier my.cnf ressemble à quelque chose comme:
[mysqld]
...
log-bin=/var/log/mysql/mysql-bin.log
server-id=1
expire_logs_days=3
log_bin_trust_function_creators=TRUE
sync_binlog=1
[mysqld_safe]
...
Mais quand je lance SHOW VARIABLES WHERE Variable_Name='expire_logs_days'
dans MySQL, il me renvoie la valeur 0
J'ai essayé:
expire_logs_days='3'
mysqld --help --verbose | grep cnf
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf order of preference
my.cnf
est situé à /etc/my.cnf
SET GLOBAL expire_logs_days=3
fonctionne dans MySQL, mais ne résout pas vraiment mon problème en soiEt c'est à peu près tout ce que je pouvais penser à faire. J'ai exécuté la commande manuelle PURGE, ce qui fonctionne très bien, mais je préférerais (bien que, s'il n'y a pas moyen de la contourner, je le ferai quand même), de ne pas exécuter la commande PURGE à l'aide de cron.
Quelqu'un a des idées? Je suis à peu près tapé.
Merci.
Puisque vous pouvez effacer les journaux binaires en utilisant PURGE BINARY LOGS;
, j’ai deux endroits où vous pouvez regarder, que vous n’avez pas mentionnés
mysql-bin.index
Ce fichier contient l'emplacement de tous les journaux binaires. Lorsque expire_logs_days est défini, mysqld ouvre ce fichier texte et vérifie les tampons datetime de chaque fichier jusqu'à ce qu'il rencontre un journal binaire dont l'horodatage est inférieur à NOW() - INTERVAL expire_logs_days DAY)
.
Les journaux binaires dans mysql-bin.index devraient être consécutifs numériquement. Si les journaux binaires ne sont pas consécutifs numériquement, la rotation des journaux est désactivée.
/var/log/mysql
Selon votre my.cnf
, ce dossier contient tous les journaux binaires.
Voici 2 questions:
/var/log/mysql
qui ne sont pas consécutifs numériquement?/var/log/mysql
qui sont NOT IN mysql-bin.index
?Parfois, des personnes suppriment des journaux binaires dans le système d'exploitation. Cela peut dissiper mysqld car mysqld utilise mysql-bin.index
pour suivre en interne l'existence de journaux binaires. Supprimez simplement les journaux binaires avec rm -f
en interrompant logiquement le mécanisme de rotation des journaux comme le sait mysqld.
Si l'un ou les deux sont les cas, vous pouvez le nettoyer comme suit:
mysql -ANe"RESET MASTER"
service mysql stop
cd /var/log/mysql
rm -f mysql-bin.*
cd
service mysql start
Après cela, vous devriez avoir une nouvelle configuration de journal binaire époustouflante.
Essaie !!!
Est-ce que changer une autre option dans ce fichier de configuration a un effet? Nous devons être certains que nous trouvons le bon fichier de configuration. Changer la valeur de server-id est probablement un bon candidat.
Si aucun effet, cherchons le bon fichier en lançant:
ps aux | grep mysqld
Et regardez les valeurs de --defaults-file ou --defaults-extra-file
Et si vous êtes toujours perplexe, assurez-vous qu'il n'y a pas de --init-file défini quelque part, en définissant la valeur sur 0.
Je ne sais pas ce qui se passe avec votre fichier my.cnf, mais en ce qui concerne le problème plus vaste, il semble que vous ayez plusieurs choix:
max_binlog_size
. Selon les docs:Les suppressions possibles se produisent au démarrage et lorsque le journal binaire est vidé.
et
De plus, le journal binaire est vidé lorsque sa taille atteint la valeur de la variable système max_binlog_size.
On dirait que le n ° 3 fera le expire_logs_days
quand il fera la chasse/purge.