O que é o General Query Log?
O General Query Log contém uma lista de informações geral sobre conexão, desconexão e queries nos clientes. Muito utilizado quando há uma necessidade de monitoramento das queries que estão sendo enviadas para o MySQL/MariaDB.
Ponto de atenção: você deve tomar cuidado com o general query log ativo, pois como ele guarda qualquer informação que o MySQL Server está fazendo o crescimento do arquivo de log é acelerado.
Habilitando o General Query Log:
Para habilitar o General Query log você precisa setar o valor 1 para a variável general_log. Pode ser adicionado, também, no arquivo cnf ou da seguinte forma:
Configurando o nome do arquivo do General Log:
Por padrão, o general_log é escrito com o hostname do server ficando ${hostname}.txt no datadir do servidor, porém ele pode ser alterado, tanto dinamicamente, como via my.cnf. É possível, também, adicionar o caminho absoluto. Exemplo:
Você pode, também, configurar o general log, e adicionar um valor para log-basename, que configura um prefixo comum entre todos os arquivos de log. Para o general log ele terá o nome do log-basename + .log. Igual, as formas anteriores para alterar. Pode ser, tanto no dinâmico, como, no arquivo cnf.
Importante log-basename, não por ser um caminho absoluto. O nome do log é sempre relativo ao datadir.
Alterando o destino do general log.
Por padrão, o MariaDB salva o general log em arquivos, você pode adicionar no my.cnf para deixar explícito, ou, caso precise voltar ao padrão, pode rodar os seguintes comandos.
Alterando dinamicamente:
Alterando via CNF:
Ou, você pode alterar para esses valores serem salvos em uma tabela:
Alterando dinamicamente:
Alterando via CNF:
Os valores serão salvos em uma tabela chamada general_log no banco mysql.
As alterações ficam assim em arquivo:
E ficarão assim quando o modelo selecionado for tabela:
É possível, também, salvar nos dois ao mesmo tempo, separando os valores no my.cnf por virgula:
Benefícios de usar tabela:
- Os logs vão seguir no padrão da tabela mysql.general_log.
- Os logs poderão ser acessados com comandos SQL. Dessa forma, você pode fazer o filtro de maneira mais rápida e fácil.
- Logs podem ser acessados remotamente, de qualquer cliente que tenha acesso ao banco de dados.
Características da tabela de general log:
- Por padrão, as tabelas de logs usam a engine CSV. Dessa forma, é possível que um usuário que contenha acesso pode copiar e importar em outros programas que processam CSV.
- É possível alterar as tabelas de log para MyISAM, mas não é possível alterá-las para InnoDB.
- Pode ser executado TRUNCATE TABLE para limpar a tabela.
- Para fazer o log rotation é possível renomear a tabela com o RENAME TABLE.
- Não é possível realizar um LOCK TABLE.
- INSERT, DELETE e UPDATE, não podem ser executados.
- Não é possível fazer dump do conteúdo da tabela.
- Não é permitido fazer particionamento.
- As escritas nas tabelas de log não são escritas no bin log, então não será replicado.
- O server sempre vai conseguir fazer a escrita, mesmo estando com read_only ativo.
Desabilitando general log para uma sessão:
Caso você seja um usuário com permissão super, você pode desabilitar o general log para sua sessão da seguinte maneira:
Na imagem abaixo é possível ver que ele registra o primeiro select, porém o segundo após desativar para a sessão ele não registra:
Desabilitando general log para algumas declarações.
A partir do MariaDB 10.3 é possível desabilitar o registro de algumas queries, utilizando a variável log_disabled_statements, essa opção não pode ser alterada dinamicamente, precisamos alterar no arquivo cnf e reiniciar o servidor.
Podemos desabilitar para declarações de slave e stored procedure: