Como habilito a função MySQL que registra cada instrução de consulta SQL recebida dos clientes e o tempo que a instrução de consulta foi enviada? Posso fazer isso no phpmyadmin ou no NaviCat? Como analiso o log?
252
Primeiro, lembre-se de que esse arquivo de log pode crescer muito em um servidor ocupado.
Para o mysql <5.1.29:
Para habilitar o log de consulta, colocar isso em /etc/my.cnf
na [mysqld]
seção
log = /path/to/query.log #works for mysql < 5.1.29
Além disso, para habilitá-lo no console do MySQL
SET general_log = 1;
Consulte http://dev.mysql.com/doc/refman/5.1/en/query-log.html
Para mysql 5.1.29+
Com o mysql 5.1.29+, a log
opção está obsoleta. Para especificar o arquivo de log e habilitar o log, use-o em my.cnf na [mysqld]
seção:
general_log_file = /path/to/query.log
general_log = 1
Como alternativa, para ativar o log no console do MySQL (também deve especificar o local do arquivo de log de alguma forma ou encontrar o local padrão):
SET global general_log = 1;
Observe também que existem opções adicionais para registrar apenas consultas lentas ou aquelas que não usam índices.
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
Dê uma olhada nesta resposta para outra pergunta relacionada. Ele mostra como ativar, desativar e ver os logs em servidores ativos sem reiniciar.
Registre todas as consultas no mysql
Aqui está um resumo:
Se você não deseja ou não pode reiniciar o servidor MySQL, pode proceder assim no seu servidor em execução:
Crie suas tabelas de log (veja a resposta )
Habilitar o log de consulta no banco de dados (observe que a string 'table' deve ser colocada literalmente e não substituída por qualquer nome de tabela. Obrigado Nicholas Pickering )
fonte
Eu uso esse método para fazer logon quando quero otimizar rapidamente diferentes carregamentos de páginas. É uma pequena dica ...
Registrando em uma TABLE
Você pode então selecionar na minha
mysql.general_log
tabela para recuperar consultas recentes.Posso fazer algo semelhante ao
tail -f
mysql.log, mas com mais refinamentos ...Isso facilita a visualização de minhas consultas que eu posso tentar reduzir. Eu uso um intervalo de 8 segundos para buscar apenas consultas executadas nos últimos 8 segundos.
fonte
Isso já estava em um comentário, mas merece sua própria resposta: Sem editar os arquivos de configuração: no mysql, como root, faça
Não se esqueça de desligá-lo depois:
fonte
/tmp/
, pode ser acabar em algum lugar como/tmp/systemd-private-...-mariadb.service-.../tmp/
Você pode desativar ou ativar o log de consultas gerais (que registra todas as consultas) com
fonte
Eu também queria ativar o arquivo de log do MySQL para ver as consultas e resolvi isso com as instruções abaixo
/etc/mysql/mysql.conf.d
e habilite as linhas abaixo
/etc/init.d/mysql restart
/var/log/mysql/
e verifique os logsfonte
fonte
No Windows, você pode simplesmente ir para
Inserir esta linha no my.ini
O arquivo my.ini finalmente se parece com isso
fonte
Há um erro na versão MySQL 5.6. Até o mysqld mostra como:
As configurações do Realy estão sendo lidas na seguinte ordem:
Verifique o arquivo: "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini"
Espero que ajude alguém.
fonte
para mysql> = 5.5 apenas para consultas lentas (1 segundo e mais) my.cfg
fonte
Para habilitar o log de consulta na máquina MAC:
Abra o seguinte arquivo:
Defina o URL do log de consulta na seção 'mysqld' da seguinte maneira:
Poucas máquinas não estão registrando a consulta corretamente; portanto, você pode habilitá-la no console do MySQL
fonte
Não é exatamente uma resposta para a pergunta, porque a pergunta já tem ótimas respostas. Esta é uma informação lateral. A ativação do general_log realmente prejudica o desempenho do MySQL. Saí
general_log =1
acidentalmente em um servidor de produção e passei horas descobrindo por que o desempenho não era comparável a uma configuração semelhante em outros servidores. Então eu encontrei isso que explica o impacto da ativação do log geral. http://www.fromdual.com/general_query_log_vs_mysql_performance .A essência da história, não coloque
general_log=1
no.cnf
arquivo. Em vez disso, useset global general_log =1
por um breve período apenas para registrar o suficiente para descobrir o que você está tentando descobrir e, em seguida, desligue-o.fonte
No phpMyAdmin 4.0, você acessa Status> Monitor. Lá, você pode ativar o log de consultas lento e o log geral, ver um monitor ao vivo, selecionar uma parte do gráfico, ver as consultas relacionadas e analisá-las.
fonte
Eu tive que largar e recriar o log geral em um ponto. Durante a recreação, os conjuntos de caracteres foram confusos e acabei tendo esse erro nos logs:
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'
Portanto, se a resposta padrão de "verificar para garantir que o logon está ativado" não funcionar, verifique se seus campos têm o conjunto de caracteres correto.
fonte