Não é possível ativar o log de consulta geral do MySQL


2

Eu estou tentando descobrir como ligar / desligar o log de consulta geral do MySQL 5.1.48, sem reiniciar o servidor (não uma opção em produção agora). No meu ambiente de teste, não está funcionando.

De acordo com isto Eu deveria poder dizer:

set global general_log = 'OFF';

que funciona: o log de consulta geral não tem mais consultas adicionadas a ele. Mas quando eu faço:

set global general_log = 'ON';

reclama que:

ERROR 1146 (42S02): Table 'mysql.general_log' doesn't exist

(verdade, isso não acontece), e o log adiciona um cabeçalho de inicialização padrão ("mysqld, Versão: 5.1.48 ..."), e nada mais.

Posso simplesmente ir para outro banco de dados MySQL com a mesma plataforma / versão, copiar sua show create table mysql.general_log;e executá-lo aqui? Isso é seguro, ou isso é sintomático de problemas mais profundos? E eu tenho que fazer isso quando ligo o log de consulta geral? Eu não vejo nada sobre isso no manual.

Respostas:


6

A variável global general_log ativa e desativa o log (desativado por padrão) para o destino de log atualmente selecionado. Se não for especificado nenhum que esteja registrando na tabela mysql.general_log:

Se --log-output for omitido ou dado sem um valor, o padrão é FILE. (Para o MySQL 5.1.6 até 5.1.20, o destino de log padrão é TABLE.)

A fim de ativar o registro em arquivo, você terá que reiniciar o MySQL especificando --log-output=FILE (ou o equivalente my.cnf)

Para o registro na tabela, vale a pena observar:

Para novas instalações do MySQL 5.1.6 ou superior, as tabelas de log são criadas durante o procedimento de instalação junto com as outras tabelas do sistema. Se você atualizar o MySQL de um release anterior ao 5.1.6 para o MySQL 5.1.6 ou superior, deverá atualizar as tabelas do sistema após a atualização para certificar-se de que as tabelas de log existam. Veja Seção 4.4.8, “mysql_upgrade - Verificar tabelas para atualização do MySQL”.

Seção 4.4.8 do manual do MySQL diz:

mysql_upgrade examina todas as tabelas em todos os bancos de dados para incompatibilidades com a versão atual do MySQL Server. O mysql_upgrade também atualiza as tabelas do sistema para que você possa aproveitar os novos privilégios ou recursos que possam ter sido adicionados.

Vale a pena ler essa parte do manual para garantir que suas tabelas de sistema estejam corretas e na versão correta.

Ah, e não posso enfatizar isso o suficiente:

Faça backup de seus bancos de dados antes de fazer algo parecido com isso


Uau, isso funcionou para mim. eu fiz mysql_upgrade -p --force e depois um service mysql restart e agora ligar e desligar general_log funciona como deveria. Muito obrigado Matt!
bawkstoo

1

Eu criei essa tabela perdida e trabalhei para mim.

use mysql;

CREATE TABLE `general_log` (
  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_host` mediumtext NOT NULL,
  `thread_id` int(11) 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' 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.