O expire_logs_days pode ter menos de 1 dia no MySQL?

5

Então ... ontem eu recebi um "após o e-mail de fato" sobre uma campanha que começou para um dos serviços que eu executo. Agora, o servidor de banco de dados está sendo atingido, com força, na ordem de cerca de 300 mb / min em log binário para a replicação. Como você pode imaginar, isso está mascando o espaço a um ritmo tremendo.

Minha expiração normal de 7 dias de registros binários não está sendo cortada. Recorri ao truncamento de logs para apenas o último por 4 horas com (estou verificando se a replicação está atualizada com mk-heartbeat ):

PURGE MASTER LOGS BEFORE DATE_SUB( NOW(), INTERVAL 4 HOUR);

Estou apenas executando isso do cron a cada poucas horas para enfrentar a tempestade, mas isso me fez questionar o valor mínimo para expire_logs_days . Eu não encontrei um valor menor que 1, mas isso não significa que não seja possível. O link fornece o tipo como sendo numérico, mas não indique se está esperando inteiros.

    
por blacktip 08.09.2010 / 14:47

3 respostas

6

Experimentar foi a ordem da noite ...

mysql> set @@global.expire_logs_days=0.75;
ERROR 1232 (42000): Incorrect argument type to variable 'expire_logs_days'
mysql> set @@global.expire_logs_days=.75;
ERROR 1232 (42000): Incorrect argument type to variable 'expire_logs_days'
mysql> set @@global.expire_logs_days=3.4;
ERROR 1232 (42000): Incorrect argument type to variable 'expire_logs_days'
mysql> set @@global.expire_logs_days=3/4;
ERROR 1232 (42000): Incorrect argument type to variable 'expire_logs_days'
mysql> set @@global.expire_logs_days=F;
ERROR 1232 (42000): Incorrect argument type to variable 'expire_logs_days'
mysql> set @@global.expire_logs_days=0xF;
ERROR 1232 (42000): Incorrect argument type to variable 'expire_logs_days'
mysql> set @@global.expire_logs_days=1;
Query OK, 0 rows affected (0.00 sec)
    
por 09.09.2010 / 04:37
3

Na verdade, existe uma maneira de imitá-lo.

Aqui estão as etapas para limpar os registros binários em 1 hora.

PASSO 01) Crie um script SQL que apague todos os registros binários cujo registro de data e hora seja anterior a uma hora:

echo "FLUSH LOGS;" > /usr/bin/purge.sql
echo "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 1 HOUR;" >> /usr/bin/purge.sql

ETAPA 02) Crie um script de shell ( /usr/bin/purge.sh ) para chamar mysql com purge.sql

mysql -uroot -p... < /usr/bin/purge.sql

PASSO 03) Torne /usr/bin/purge.sh executável

chmod +x /usr/bin/purge.sh

PASSO 04) Adicione usr/bin/purge.sh ao crontab para começar a cada hora

0 * * * * /usr/bin/purge.sh

Experimente!

    
por 05.03.2013 / 23:39
2

Essa página diz que o intervalo é de 0 a 99. Então, sim, é um número inteiro.

0 = Sem expiração ..

Você me fez imaginar o que o 0.5 faria ... Estou pensando que ele ignoraria a parte .5 e simplesmente não a expiraria.

    
por 08.09.2010 / 15:03