Quanto tempo depois de atualizar o parâmetro expire_logs_days e reiniciar o sql, os binlogs antigos serão excluídos?

16

MySQL 5.1.x | InnoDB janelas

Meu diretório de dados mysql está começando a se encher de logs de lixeira.

Atualmente, tenho as seguintes configurações definidas no meu servidor mysql do Windows:

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

Estou planejando alterar a configuração expire_logs_days para expire_logs_days=10e devolver o serviço mysql. Quanto tempo depois de fazer essa alteração, posso esperar que os logs antigos do bin fiquem limpos.

Isso é feito apenas como parte de uma tarefa agendada todas as noites? Ou isso deve ser imediato?

Mike B
fonte

Respostas:

29

Ele será tratado imediatamente na inicialização do mysql.

Você não precisa esperar pela reinicialização do mysql.

Primeiro, defina expire_logs_dayscomo 10 em /etc/my.cnf

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

Em seguida, efetue login no mysql e execute este

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

Anote a data e hora da 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>

Portanto, o comando PURGE BINARY LOGS excluirá todos os binlogs cujo carimbo de data e hora é anterior 2012-12-11 00:00:00.

Por fim, execute este comando

SET GLOBAL expire_logs_days = 10;

É isso aí. Não é necessário reiniciar para instalar expire_logs_days .

Quanto aos parâmetros de replicação, é necessário reiniciar sim.

RolandoMySQLDBA
fonte
Resposta brilhante. Obrigado. Eu aprecio os detalhes.
Mike B
Atualize, corrigi um erro de digitação.
RolandoMySQLDBA
11
Apenas observe que expire_logs_days agora está obsoleto no MySQL 8.0 (por detalhes no link fornecido por @RolandoMySQLDBA). Use binlog_expire_logs_seconds em vez disso.
John Rix