¿Qué tan pronto después de actualizar expire_logs_days param y reiniciar sql se eliminarán los binlogs antiguos?

16

MySQL 5.1.x | InnoDB | Ventanas

Mi directorio de datos mysql está comenzando a llenarse con registros de bin.

Actualmente tengo las siguientes configuraciones configuradas en mi servidor mysql de Windows:

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

Estoy planeando cambiar la configuración de expire_logs_days expire_logs_days=10y devolver el servicio mysql. ¿Qué tan pronto después de hacer este cambio puedo esperar que los viejos registros de bin se borren?

¿Esto solo se hace como parte de una tarea programada todas las noches? ¿O debería ser esto inmediato?

Mike B
fuente

Respuestas:

29

Se manejará inmediatamente al iniciar mysql.

No tiene que esperar a que se reinicie mysql.

Primero, establece expire_logs_daysque sea 10 en /etc/my.cnf

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

A continuación, inicie sesión en mysql y ejecute esto

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

Anote la fecha y hora de la consulta.

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>

Por lo tanto, el comando PURGE BINARY LOGS eliminará todos los binlogs cuyos sellos de fecha y hora sean anteriores 2012-12-11 00:00:00.

Finalmente, ejecuta este comando

SET GLOBAL expire_logs_days = 10;

Eso es. No es necesario reiniciar para instalar expire_logs_days .

En cuanto a los parámetros de replicación, sí se requiere reiniciar.

RolandoMySQLDBA
fuente
Brillante respuesta. Gracias. Agradezco el detalle.
Mike B
Actualiza, corrigí un error tipográfico.
RolandoMySQLDBA
1
Solo para notar que expire_logs_days ahora está en desuso en MySQL 8.0 (según los detalles en el enlace proporcionado por @RolandoMySQLDBA). Use binlog_expire_logs_seconds en su lugar en adelante.
John Rix