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?
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?
Respostas:
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 )
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log;
SET global general_log = 0;
Eu uso esse método para fazer logon quando quero otimizar rapidamente diferentes carregamentos de páginas. É uma pequena dica ...
Registrando em uma TABLE
SET global general_log = 1;
SET global log_output = '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 ...
select * from mysql.general_log
where event_time > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> ""
and argument <> "SET NAMES 'UTF8'" and argument <> "SHOW STATUS"
and command_type = "Query" and argument <> "SET PROFILING=1"
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.
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
SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;
Não se esqueça de desligá-lo depois:
SET global general_log = off;
/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
SET GLOBAL general_log = 1 # (or 0 to disable)
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
general_log_file = /var/log/mysql/mysql.log
general_log = 1
/etc/init.d/mysql restart
/var/log/mysql/
e verifique os logs// To see global variable is enabled or not and location of query log
SHOW VARIABLES like 'general%';
// Set query log on
SET GLOBAL general_log = ON;
No Windows, você pode simplesmente ir para
C:\wamp\bin\mysql\mysql5.1.53\my.ini
Inserir esta linha no my.ini
general_log_file = c:/wamp/logs/mysql_query_log.log
O arquivo my.ini finalmente se parece com isso
...
...
...
socket = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...
Há um erro na versão MySQL 5.6. Até o mysqld mostra como:
Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
As configurações do Realy estão sendo lidas na seguinte ordem:
Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
Verifique o arquivo: "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini"
Espero que ajude alguém.
para mysql> = 5.5 apenas para consultas lentas (1 segundo e mais) my.cfg
[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes
Para habilitar o log de consulta na máquina MAC:
Abra o seguinte arquivo:
vi /private/etc/my.cnf
Defina o URL do log de consulta na seção 'mysqld' da seguinte maneira:
[mysqld]
general_log_file=/Users/kumanan/Documents/mysql_query.log
Poucas máquinas não estão registrando a consulta corretamente; portanto, você pode habilitá-la no console do MySQL
mysql> SET global general_log = 1;
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, use set 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.
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.
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.