Combien de temps après la mise à jour du paramètre expire_logs_days et le redémarrage de SQL les anciens binlogs seront-ils supprimés?

16

MySQL 5.1.x | InnoDB | les fenêtres

Mon répertoire de données mysql commence à se remplir de journaux bin.

J'ai actuellement les paramètres suivants configurés sur mon serveur Windows mysql:

[mysqld]
log-bin
server-id=1
binlog-do-db=foodb1
binlog-do-db=foodb2
expire_logs_days=25

Je prévois de changer le paramètre expire_logs_days expire_logs_days=10et de faire rebondir le service mysql. Combien de temps après avoir effectué cette modification, puis-je m'attendre à ce que les anciens journaux de bac disparaissent.

Cela se fait-il uniquement dans le cadre d'une tâche planifiée tous les soirs? Ou cela devrait-il être immédiat?

Mike B
la source

Réponses:

29

Il sera géré immédiatement au démarrage de mysql.

Vous n'avez pas à attendre le redémarrage de mysql.

Tout d'abord, réglé expire_logs_dayssur 10 dans /etc/my.cnf

[mysqld]
log-bin
server-id=1
binlog-do-db=foodb1
binlog-do-db=foodb2
expire_logs_days=10

Ensuite, connectez-vous à mysql et exécutez ceci

PURGE BINARY LOGS BEFORE (date(now()) + interval 0 second - interval 10 day);

Notez la date et l'heure de la requête

mysql> select date(now()) + interval 0 second - interval 10 day;
+---------------------------------------------------+
| date(now()) + interval 0 second - interval 10 day |
+---------------------------------------------------+
| 2012-12-11 00:00:00                               |
+---------------------------------------------------+
1 row in set (0.00 sec)

mysql>

Par conséquent, la commande PURGE BINARY LOGS supprimera tous les binlogs dont l'horodatage est antérieur 2012-12-11 00:00:00.

Enfin, exécutez cette commande

SET GLOBAL expire_logs_days = 10;

C'est ça. Aucun redémarrage n'est nécessaire pour installer expire_logs_days .

Quant aux paramètres de réplication, oui un redémarrage est requis.

RolandoMySQLDBA
la source
Réponse brillante. Je vous remercie. J'apprécie le détail.
Mike B
Veuillez rafraîchir, j'ai corrigé une faute de frappe.
RolandoMySQLDBA
1
Juste pour noter que expire_logs_days est désormais obsolète dans MySQL 8.0 (selon les détails du lien donné par @RolandoMySQLDBA). Utilisez binlog_expire_logs_seconds à la place.
John Rix