O MySQL Server gera vários logs que podem ajudá-lo a monitorar as atividades do servidor. No entanto, quando esses logs são ativados, eles podem aumentar de tamanho e começar a ocupar muito espaço em disco. É por isso que é importante ter uma maneira automatizada de arquivar e preservar os arquivos de log do MySQL por um determinado período, além de excluir os antigos. Nesta postagem do blog, descrevemos algumas práticas recomendadas para configurar e gerenciar logs de erros do MySQL, logs gerais e logs de consulta lenta para suas implantações do MySQL.
Configurando o log do servidor MySQL
Vejamos como configurar os 3 tipos de logs a seguir:
Registro de erros
Registra todos os problemas encontrados durante a inicialização, execução ou interrupção do mysqld. Este log pode ser habilitado tendo a seguinte opção no arquivo /etc/my.cnf:
- log_error=/var/log/mysql/mysqld.log
Registro de consulta geral
Registra conexões de clientes estabelecidas e declarações recebidas de clientes. Este log pode ser habilitado tendo a seguinte opção no arquivo /etc/my.cnf:
- general_log=ON
- general_log_file=/var/log/mysql/general.log
Registro de consulta lenta
Registra consultas que levaram mais de long_query_time segundos para serem executadas. Este log pode ser habilitado pela seguinte opção no arquivo /etc/my.cnf:
- slow_query_log=ON
- slow_query_log_file=/var/log/mysql/mysql-slowquery.log
Configuração de critérios para rotação de log
Como exemplo, vamos ter alguns critérios para gerenciar logs de consultas gerais do MySQL. Podemos criar um conjunto adequado de critérios para o gerenciamento de logs fazendo as seguintes perguntas:
P:Qual é o tamanho máximo que o arquivo de log pode aumentar?
R:Digamos que possa crescer até 300 MB, após o que precisa ser girado e compactado.
P:Qual é a frequência com que você deseja que o arquivo de log seja girado?
R:Podemos dizer que queremos que os logs sejam girados diariamente.
P:Quantos arquivos de log antigos você deseja reter?
R:Gostaríamos de manter os últimos 30 arquivos de log.
Com base nos critérios acima, o espaço geral em disco necessário para o gerenciamento geral do log de consultas é de cerca de 1,2 GB. Assumindo uma taxa de compactação de 90% – teremos 30 arquivos de log compactados de 30 MB cada e um arquivo de log ao vivo de cerca de 300 MB.
Gerenciando logs do servidor MySQL:girar, compactar, reter e excluirClique para tuitar
Gerenciando os logs usando o utilitário logrotate do Linux
logrotate é um utilitário Linux que ajuda na administração eficiente de arquivos de registro e oferece opções para rotação automática, compactação e remoção de arquivos de registro. Os critérios estabelecidos acima podem ser configurados para o utilitário logrotate criando um arquivo de configuração na pasta /etc/logrotate.d.
Vamos chamar esse arquivo de configuração de mysqlgeneral e o conteúdo do arquivo será:
/var/log/mysql/general.log{
compress
dateext
maxsize 300M
copytruncate
maxage 365
dateformat -%Y%m%d%s
daily
rotate 30
notifempty
}
Com as opções acima para logrotate, os logs de consulta gerais são alternados diariamente ou quando o tamanho do arquivo de log excede 300 MB. Os logs antigos são compactados e 30 desses arquivos serão preservados. A rotação de log será ignorada se o arquivo de log estiver vazio devido à configuração 'notifempty'.
A opção ‘copytruncate’ é para garantir que o arquivo de log atual nunca seja excluído durante a rotação e apenas seu conteúdo seja truncado. Isso é importante, pois alguns aplicativos esperam que o arquivo de log esteja sempre disponível e não é possível excluir o log sem interromper o aplicativo primeiro.
Agora que a configuração de rotação de log está definida para o log de consulta geral, o utilitário logrotate deve ser executado para que a configuração acima seja executada. Isso geralmente é feito por meio de um cron job. Podemos definir isso para ser executado a cada hora colocando o script logrotate no diretório /etc/cron.hourly:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
Então, com algumas etapas simples, configuramos a rotação de logs para logs gerais do MySQL com base em nossos critérios. A mesma abordagem pode ser seguida para registros de erros do MySQL e registros de consultas lentas. Confira estes outros posts para saber mais sobre como otimizar suas implantações do MySQL:
- Calculando o tamanho do pool de buffers InnoDB para seu servidor MySQL
- Tutorial MySQL – Configurando e gerenciando SSL em seu servidor MySQL
- Explicação da estrutura de alta disponibilidade do MySQL – Parte I:introdução