Português do Brasil English
Devin no Facebook  Devin no Twitter  RSS do Site 
Servidores    

Rotação de logs binários no MySQL


Comentários  9
Visualizações  
536.933

Os logs binários do MySQL contém uma espécie de histórico com todas as consultas SQL que são feitas em um servidor. Esses logs servem principalmente para fazer duas coisas: replicar esses dados em um servidor secundário (modelo mestre-escravo) e efetuar backups diferenciais.

Na configuração do MySQL, o log binário é configurado com duas linhas:

log-bin=/var/lib/mysql/mysql-bin.log
server-id=1

A opção log-bin indica qual o padrão de arquivos que o MySQL vai gravar. Nesse exemplo, teremos os seguintes arquivos:

  • mysql-bin.XXXXXX – Onde XXXXXX é um número sequencial, que são os logs binários em si. Vão ser vários arquivos com um tamanho máximo (por padrão, 1GB).
  • mysql-bin.index – Índice com todos os arquivos de log binário atuais.

Muitas vezes acontece da pessoa configurar isso e não tratar esses logs binários. Em um banco de dados com muito movimento, esses logs binários podem crescer assustadoramente e ocupar todo o espaço em disco.

Conheço duas formas de fazer a rotação. A que nunca deve ser feita é simplesmente apagar os arquivos de logs binários do sistema de arquivos. Como o MySQL lida com isso, nada melhor do que tratar essa limpeza com o próprio.

A primeira é utilizando a opção expire_logs_days no my.cnf. Exemplo:

expire_logs_days = 7

Os logs que forem mais velhos do que 7 dias serão excluídos do MySQL automaticamente.

Outra forma de fazer isso é via o próprio MySQL. Conecte-se a um prompt MySQL e execute:

mysql> SHOW BINARY LOGS;
+------------------+------------+
| Log_name         | File_size  |
+------------------+------------+
| mysql-bin.000858 | 1073769033 |
| mysql-bin.000859 | 1073772184 |
| mysql-bin.000860 | 1073769005 |
| mysql-bin.000861 | 1073809148 |
| mysql-bin.000862 | 1073765575 |
| mysql-bin.000863 | 1073797185 |
| mysql-bin.000864 | 1073757152 |
| mysql-bin.000865 | 1073763101 |
| mysql-bin.000866 | 1073771131 |
| mysql-bin.000867 | 1073770555 |
| mysql-bin.000868 | 1073744076 |
| mysql-bin.000869 | 1073818669 |
| mysql-bin.000870 | 1073754790 |
| mysql-bin.000871 | 1073770448 |
| mysql-bin.000872 | 1073755079 |
| mysql-bin.000873 | 1073744861 |
| mysql-bin.000874 | 1073807803 |
| mysql-bin.000875 | 1073777945 |
| mysql-bin.000876 | 1073741999 |
| mysql-bin.000877 |  718403419 |
+------------------+------------+
20 rows in set (0.00 sec)

Com isso, dá pra ver que temos muitos logs binários e quais os seus tamanhos. Então podemos apagar da seguinte forma:

PURGE BINARY LOGS BEFORE '2010-07-04 12:27:59';

Isso apaga os logs binários até a data/hora especificada.

Ou pode-se fazer por nome de arquivo também:

PURGE BINARY LOGS TO 'mysql-bin.000874';

Apaga todos os logs binários anteriores a sequência 000874.

Usar o expire_logs_days é a melhor opção, mas nada lhe impede que você utilize o crontab e o comando PURGE para se certificar que isto está sendo feito :)

536.933

Comentários  9
Visualizações  
536.933


TagsLeia também

Apaixonado por Linux e administração de sistemas. Viciado em Internet, servidores, e em passar conhecimento. Idealizador do Devin, tem como meta aprender e ensinar muito Linux, o que ele vem fazendo desde 1997 :-)


Leia também



Comentários

9 respostas para “Rotação de logs binários no MySQL”

  1. Muito bom! Solucionou meu problema. Obrigado.

  2. Excelente! Me salvou aqui de uma burrada que fiz, obrigado mestre!

  3. Andre Luiz disse:

    Boa tarde!
    Em que parte do my.cnf se insere esta llinha "expire_logs_days = 7"

  4. adriel disse:

    como faço para iniciar o mysql depois que um log binário foi deletado?

  5. Amanda disse:

    Não entendi direito.

  6. Wagner Antunes disse:

    Parabéns!!! Os artigos do seu site são bem completos e objetivos.

  7. Lilian disse:

    Boa Tarde Hugo,

    Como faço para fazer a replicação a partir de logs que já estão na máquina ?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *