Registrar todas as consultas no mysql

É possível para mim ativar o log de auditoria no meu database mysql?

Eu basicamente quero monitorar todas as consultas por uma hora e despejo do log em um arquivo.

Inicie o mysql com a opção –log:

mysqld --log=log_file_name 

ou coloque o seguinte no seu arquivo my.cnf :

 log = log_file_name 

Qualquer um deles registrará todas as consultas no log_file_name.

Você também pode registrar apenas consultas lentas usando a opção --log-slow-queries vez de --log . Por padrão, as consultas que levam 10 segundos ou mais são consideradas lentas, você pode alterar isso definindo long_query_time como o número de segundos que uma consulta deve executar antes de ser registrada.

( Nota : Para o mysql-5.6 + isso não funcionará. Há uma solução que se aplica ao mysql-5.6 + se você descer ou clicar aqui .)

Se você não quer ou não pode reiniciar o servidor MySQL, você pode continuar assim em seu servidor em execução:

  • Crie suas tabelas de log no database mysql
  CREATE TABLE `slow_log` ( `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `user_host` mediumtext NOT NULL, `query_time` time NOT NULL, `lock_time` time NOT NULL, `rows_sent` int(11) NOT NULL, `rows_examined` int(11) NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' 
  CREATE TABLE `general_log` ( `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `user_host` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, `server_id` int(10) unsigned NOT NULL, `command_type` varchar(64) NOT NULL, `argument` mediumtext NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log' 
  • Ativar o log de consulta no database
 SET global general_log = 1; SET global log_output = 'table'; 
  • Visualizar o log
 select * from mysql.general_log 
  • Desativar o log de consulta no database
 SET global general_log = 0; 

Além do que eu encontrei aqui, executando o seguinte foi a maneira mais simples de despejar consultas em um arquivo de log sem reiniciar

 SET global log_output = 'FILE'; SET global general_log_file='/Applications/MAMP/logs/mysql_general.log'; SET global general_log = 1; 

pode ser desligado com

 SET global general_log = 0; 

A resposta principal não funciona no mysql 5.6+. Use isso em vez disso:

 [mysqld] general_log = on general_log_file=/usr/log/general.log 

no seu arquivo my.cnf / my.ini

Ubuntu / Debian : /etc/mysql/my.cnf
Windows : c: \ ProgramData \ MySQL \ MySQL Server 5.x
wamp : c: \ wamp \ bin \ mysql \ mysqlx.yz \ my.ini
xampp : c: \ xampp \ mysql \ bin \ my.ini.

Ativar o log para tabela

 mysql> SET GLOBAL general_log = 'ON'; mysql> SET global log_output = 'table'; 

Ver log por consulta selecionada

 select * from mysql.general_log 

Maneira rápida de ativar o Registro Geral de Consultas do MySQL sem reiniciar.

 mysql> SET GLOBAL general_log = 'ON'; mysql> SET GLOBAL general_log_file = '/var/www/nanhe/log/all.log'; 

Eu instalei o mysql através do homebrew, mysql versão: mysql Ver 14.14 Distrib 5.7.15, para osx10.11 (x86_64) usando o wrapper EditLine

Para o registro, general_log e slow_log foram introduzidos no 5.1.6:

http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html

5.2.1. Selecionando consulta geral e destinos de saída de log de consulta lenta

A partir do MySQL 5.1.6, o MySQL Server fornece controle flexível sobre o destino da saída para o log de consulta geral e o log de consulta lenta, se esses logs estiverem ativados. Destinos possíveis para inputs de log são arquivos de log ou as tabelas general_log e slow_log no database mysql

Você deve estar ciente de que o log do mysql realmente impacta o desempenho, mas pode ser uma coisa sensata a se fazer.

Eu costumo deixá-lo no servidor dev (exceto quando nos deixa loucos :))

No caso de usar o AWS RDS MYSQL, siga o guia passo a passo aqui.

Quando definido como saída de ‘arquivo’, você pode visualizar o log diretamente do Console “Log” do AWS RDS.

Registro de MYSQL no AWS RDS