Banco de dados geram toneladas de logs, e é essencial gerenciá-los corretamente. Os logs ajudam os DBAs a entender o que está acontecendo nos bastidores, rastrear erros e otimizar o desempenho de consultas lentas. No entanto, esses logs podem se tornar um problema ao longo do tempo, especialmente se consumirem muito espaço em disco e não forem gerenciados adequadamente.
Por que rotacionar logs?
Os logs são como o diário de um sistema; eles acompanham tudo. Os logs podem crescer bastante com o tempo e se tornar um problema para o espaço em disco (especialmente ao usar um log_error_verbosity maior ou um long_query_time mais baixo). Sem falar que, fazer uma pesquisa em um arquivo de logs enorme pode ser uma tarefa tediosa. É por isso que rotacionar os logs se torna essencial, especialmente em bancos de dados como o MySQL.
Configurando o logrotate
Embora o MySQL cuide de alguns de seus logs, certos logs, como os de erro e consultas lentas, não são rotacionados automaticamente. Felizmente, na maioria das distribuições Linux, existe uma ferramenta chamada logrotate
projetada especificamente para essa tarefa.
Configurar o logrotate
para o MySQL é relativamente simples. Aqui está um guia passo a passo:
- Crie um Arquivo de Configuração: Crie um arquivo de configuração específico para o MySQL. Use o comando:
1 |
$ sudo vi /etc/logrotate.d/mysql |
- Adicione o Conteúdo de Configuração: Dentro deste arquivo, adicione o seguinte conteúdo:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/var/log/mysql/mysql_error.log /var/log/mysql/slow_query.log { compress create 660 mysql mysql size 1G dateext missingok notifempty sharedscripts postrotate /usr/bin/mysql -e 'FLUSH SLOW LOGS; FLUSH ERROR LOGS;' endscript rotate 30 } |
Nota: Certifique-se de atualizar os nomes dos logs de erro do MySQL e de consultas lentas na primeira linha de acordo com a configuração do seu servidor. Você pode verificar seus caminhos de logs com a consulta:
1 |
SELECT @@global.log_error, @@global.slow_query_log_file; |
- Entendendo a Configuração:
- compress: Comprime os logs rotacionados para economizar espaço.
- create 660 mysql mysql: Garante que os novos arquivos de logs tenham as permissões e propriedade corretas.
- size 1G: Rotaciona o log uma vez que ele atinja 1 Gigabyte em tamanho.
- dateext: Adiciona uma extensão de data ao nome do arquivo de log rotacionado.
- notifempty: Não rotacione o arquivo de log se ele estiver vazio.
- missingok: Se o arquivo de log estiver faltando, passe para o próximo passo sem emitir uma mensagem de erro.
- sharedscripts: informa ao
logrotate
para verificar todos os logs antes de executar o script postrotate. O script é executado apenas uma vez se um ou ambos os logs forem rotacionados. Se nenhum dos logs for rotacionado, o scriptpostrotate
não é executado. - postrotate: Comandos para executar após a rotação do log.
- rotate 30: Mantém 30 arquivos de logs rotacionados antes de excluir o mais antigo.
- Ative e Teste: Depois de salvar e fechar o arquivo de configuração, o
logrotate
irá pegá-lo automaticamente durante sua próxima execução. Você também pode forçar uma execução para testar sua configuração:
1 |
$ logrotate --force /etc/logrotate.d/mysql |
- Leitura Adicional: Como todas as ferramentas, há muito mais no
logrotate
do que a configuração básica. A documentação oferece um mergulho profundo: [Documentação do Logrotate]
Em conclusão, embora os logs sejam inestimáveis para manter e solucionar problemas dos sistemas, gerenciá-los eficientemente garante que seus sistemas funcionem sem problemas. O logrotate
oferece uma solução prática para manter seus logs do MySQL em ordem.
Show, parabéns pelo artigo bem explicativo e de fácil entendimento.