Como posso rastrear todas as consultas no meu servidor MySQL?

4

Eu estou tentando contar todas as consultas SELECTS, UPDATES, INSERTs no meu servidor MySQL. A idéia principal é dizer, no final do dia, "nós tivemos x querys hoje, sendo x1 selects, x2 inserts, etc".

Como posso fazer isso?

Obrigado !!

    
por santiago.basulto 07.05.2010 / 17:25

5 respostas

4

O MySQL já mantém contadores internos:

mysqladmin ext | grep -e 'Com_\(update\|select\|insert\)'

não há necessidade de arquivos de log / tables / tcpdumping / maatkit.

    
por 07.05.2010 / 20:09
7

As versões atuais do MySQL suportam dois tipos diferentes de logs de consulta:

Primeiro, o log de consulta geral rastreia todas as instruções executadas no servidor MySQL, incluindo SELECTs. Mas é lento, ineficiente e pode facilmente matar o desempenho de um banco de dados de produção, então tenha cuidado com isso.

Dependendo da versão do MySQL que você está executando, você deve usar a opção '--log' ou as opções '--general-log' e '--general_log_file', juntas, para ativar o log de consulta geral e controlar onde ele grava. Os documentos têm mais detalhes:

Caso a penalidade de tempo de execução do log de consulta geral seja muito alta, você poderá considerar se o log binário (log binário) pode atender às suas necessidades. O log binário rastreia quaisquer instruções que possam atualizar dados ou esquemas, mas não instruções somente leitura, como SELECT. Mas o log binário é muito rápido e eficiente em disco, e também pode ser usado para replicação, backups / restaurações, etc.

A opção básica para habilitar o log binário é '--log-bin', e há algumas outras opções relacionadas que controlam exatamente como ele funciona. O utilitário 'mysqlbinlog' (parte da instalação central do servidor MySQL) pode analisar o formato binário do log binário de volta em instruções SQL, que você pode canalizar para qualquer script ou programa que você usa para resumir as consultas (por exemplo, mysqlbinlog <BIN_LOG_FILENAME> | <YOUR_SCRIPT_NAME> . páginas de documento para mais informações:

  • (documentos binlog) link
  • (documentos do utilitário de tradução do mysqlbinlog) link
por 07.05.2010 / 18:09
2
Os logs de

são todos bons e perfeitos - as respostas mencionadas por Irosa e Ryan são ótimas, mas você pode executá-las de forma completa - sem ativar o registro. dê uma olhada em mk-query-digest de maatkit . ele pode analisar não apenas os logs do mysql, mas também o tráfego capturado com o tcpdump. e 'de graça', você terá um bom detalhamento dos tipos de consulta / tempo de execução, etc.

    
por 07.05.2010 / 18:23
0

Edite my.cnf e adicione

log=/path/to/whatever/file/you.want

e reinicie o MySQL.

Você encontrará todas as consultas registradas no arquivo que você especificar.

    
por 07.05.2010 / 17:57
0

Além das duas soluções mencionadas (log de consulta do MySQL e mk-query-digest ), você pode querer dar uma olhada em MySQL Proxy que pode ser usado para registrar as consultas enviadas ao seu mysqld .

    
por 08.05.2010 / 07:54

Tags