Estou executando vários servidores MySQL como escravos e mestres. É muito chato procurar logs lentos e erros em todos os servidores, então gostaria de registrar todos os erros em um banco de dados externo.
DB1 DB2 DBn ...
\ | /
\ | / <-- error logs and slow logs
\ | /
[MySQL error & slow log database]
Existe alguma maneira simples de fazer isso?
Ou eu preciso escrever alguns scripts e outras coisas?
PS Espero que você aprecie minhas excelentes habilidades de diagramação ASCII
Você já pensou em converter o log lento em uma tabela MyISAM?
Quanto ao MySQL 5.1.30, você pode escolher o formato do log lento e do log geral como TABLE ou FILE por meio da opção log_output . Também está disponível no MySQL 5.5 .
Para suportar a opção TABLE para log_output, o MySQL forneceu duas tabelas:
mysql.slow_log
mysql.general_log
Por causa desta questão, vou discutir apenas
mysql.slow_log
Por padrão, isso é
mysql.slow_log
:A tabela slow_log usa o mecanismo de armazenamento CSV. Observe que uma tabela CSV não pode ser indexada. Isso não é muito útil para fazer análises por data e hora. BOAS NOTÍCIAS: Você pode convertê-lo em uma tabela MyISAM.
Para facilitar um log lento baseado em MyISAM, faça o seguinte:
Step01) Transforme mysql.slow_log em uma tabela MyISAM
Step02) Indexar a coluna de carimbo de data/hora chamada
start_time
Step03) Adicione as seguintes linhas ao my.cnf (ou my.ini)
Passo 04) Reinicie o MySQL
Para Linux
ou para Windows
Step05) Execute o seguinte comando no MySQL
Por padrão , long_query_time é 10 segundos
Step06) Execute este comando
Se long_query_time for 10 segundos, este SELECT deve ser colocado deliberadamente em mysql.slow_log.
Step07) Execute este comando
Se você vir alguma linha na tabela com o
SELECT SLEEP(15);
, PARABÉNS!!!Agora você pode executar consultas SELECT
mysql.slow_log
para copiar algumas ou todas as linhas para outras tabelas ou outros bancos de dados.Eu postei respostas anteriores em conjunto com este assunto:
Mar 30, 2012
: Configuração de log lento do MySQLNov 18, 2011
: Crie uma tabela de log personalizada no MySQLJun 30, 2011
: Como faço para enviar os logs do MySQL para o syslog?ATUALIZAÇÃO 2012-11-12 17:00 EDT
Com toda a justiça, a pergunta perguntou sobre logs de erro. Eu não incluí explicitamente nada sobre isso. Vou incluir algum código que aborda como
Digamos que o log de erros seja definido em qualquer servidor de banco de dados da seguinte maneira:
Você poderia criar um script assim:
ou se você deseja coletar e redefinir o log de erros sem uma reinicialização do mysql (somente Linux), você pode usar isso (essa técnica nunca pode ser feita no Windows porque o sistema operacional Windows bloqueia o arquivo de log de erros da gravação externa):
Coloque este script em cada servidor de banco de dados. Configure um crontab para este script disparar a cada 5 minutos. Certifique -se de que
ERROR_FOLDER
está definido para uma pasta compartilhada comum.ATUALIZAÇÃO 2012-11-12 17:24 EDT
Para esclarecimento, executar o MySQL
FLUSH LOGS;
é insuficiente porque...FLUSH LOGS;
fecha e reabre. Nenhuma rotação é fornecida pelo mysqldFLUSH LOGS;
será...FLUSH ERROR LOGS;
fecha e reabre o log de erros. Nenhuma rotação é fornecidaÉ por isso que alguns scripts são necessários
Os logs lentos são apenas arquivos de texto, então não há como o MySQL lidar com eles.
O processo geral é mover/renomear os arquivos e então fazer um MySQL FLUSH, que dirá ao MySQL para iniciar um novo arquivo de log.
Em seguida, pegue o arquivo movido/renomeado e envie-o para o seu servidor de log. Parece que um simples script bash funcionaria.
Espero que ajude.