Como ver os arquivos de log no MySQL?


176

Eu li que o servidor Mysql cria um arquivo de log em que mantém um registro de todas as atividades - como quando e quais consultas são executadas.

Alguém pode me dizer onde ele existe no meu sistema? Como posso ler?

Basicamente, preciso fazer backup do banco de dados com entradas diferentes [backup entre duas datas], então acho que preciso usar o arquivo de log aqui, é por isso que quero fazê-lo ...

Eu acho que esse log deve ser protegido de alguma forma, porque informações confidenciais como nomes de usuário e senha podem ser registradas [se alguma consulta exigir isso]; então, pode ser protegido, não pode ser facilmente visto?

Eu tenho acesso root ao sistema, como posso ver o log?

Quando tento abrir /var/log/mysql.log, ele está vazio.

Este é o meu arquivo de configuração:

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
log = /var/log/mysql/mysql.log 
binlog-do-db=zero



user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Respostas:


164

Aqui está uma maneira simples de habilitá-los. No mysql, precisamos ver frequentemente 3 logs, os quais são principalmente necessários durante qualquer desenvolvimento de projeto.

  • The Error Log. Ele contém informações sobre os erros que ocorrem enquanto o servidor está em execução (também inicie e pare).

  • The General Query Log. Este é um registro geral do que o mysqld está fazendo (conectar, desconectar, consultas)

  • The Slow Query Log. Consiste em instruções SQL "lentas" (como indicado pelo nome).

Por padrão, nenhum arquivo de log está ativado no MYSQL. Todos os erros serão mostrados no syslog (/var/log/syslog ).

Para habilitá-los basta seguir as etapas abaixo:

Etapa 1: Vá para este arquivo ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) e remova ou comente essa linha.

step2: Vá para o arquivo conf mysql ( /etc/mysql/my.cnf) e adicione as seguintes linhas

Para habilitar o log de erros, adicione o seguinte

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log

Para habilitar o log de consultas gerais, adicione o seguinte

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Para habilitar o Slow Query Log, adicione o seguinte

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

step3: salve o arquivo e reinicie o mysql usando os seguintes comandos

service mysql restart

Para habilitar logs em tempo de execução, efetue login no mysql client ( mysql -u root -p) e forneça:

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

Finalmente, uma coisa que gostaria de mencionar aqui é que li isso em um blog . Obrigado. Funciona para mim.

Clique aqui para visitar o blog


2
Eu acho que você 'esqueceu' de escrever algumas coisas. Passo 1 é incompleta e a sentença no link 'blog' está faltando
Athafoud

Olá, @Athafoud, encontre o link agora.
Loyola 29/04

3
O artigo do blog vinculado menciona a modificação /etc/mysql/conf.d/mysqld_safe_syslog.cnfapenas se o log de erros deve ser ativado. No entanto, essa resposta, como está escrita atualmente, parece sugeri-la para qualquer log.
Melebius

2
Minha versão do servidor é 5.6.35. A resposta de Ross Smith II aqui funciona para mim. Eu tenho que definir slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.loge long_query_time = 60sob [mysqld]. Quando tento iniciar com sua configuração, o servidor está iniciando, mas lentamente e com erros. Eu realmente acho que as versões diferem e nas versões posteriores o oracle queria unificar os nomes das variáveis. Além disso: IMHO 2 segundos não é tão longo.
JackLeEmmerdeur

1
E a permissão nesses arquivos? Eu já vi em muitos casos os arquivos de log não serem criados.
precisa saber é o seguinte

42

Você precisa ativar o log de consultas no mysql.

  1. editar /etc/my.cnf

    [mysqld]
    log = / tmp / mysql.log
    
  2. reinicie o computador ou o serviço mysqld

    serviço mysqld restart
    
  3. abra phpmyadmin / qualquer aplicativo que use o mysql / mysql console e execute uma consulta

  4. cat /tmp/mysql.log (você deve ver a consulta)


não importa, apenas certifique-se a consulta for executada sobre o db
danidacar

6
caminho inválido. Você tem /etc/my.cnf deve ser /etc/mysql/my.cnf
cola místico

39

Os logs do MySQL são determinados pelas variáveis ​​globais, como:

  • log_error para o log de mensagens de erro;
  • general_log_filepara o arquivo de log de consulta geral (se ativado por general_log);
  • slow_query_log_filepara o arquivo de log de consulta lenta (se ativado por slow_query_log);

Para ver as configurações e sua localização, execute este comando shell:

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log

Para imprimir o valor do log de erros, execute este comando no terminal:

mysql -e "SELECT @@GLOBAL.log_error"

Para ler o conteúdo do arquivo de log de erros em tempo real, execute:

sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")

Nota: Hit Control- Cquando terminar

Quando o log geral estiver ativado, tente:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")

Para usar mysqlcom o acesso por senha, adicione -pou -pMYPASSparâmetro. Para mantê-lo lembrado, você pode configurá-lo no seu ~/.my.cnf, por exemplo

[client]
user=root
password=root

Então será lembrado pela próxima vez.


1
Ou se você precisar digitar uma senha, tente o seguinte: mysql -p -se "SHOW VARIABLES" |
Paul Chernoch -

9

No meu (eu tenho o LAMP instalado) / etc / mysql /my.cnf, achei as seguintes linhas comentadas na seção [mysqld]:

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Eu tive que abrir este arquivo como superusuário, com terminal:

sudo geany /etc/mysql/my.cnf

(Prefiro usar Geany em vez de gedit ou VI, não importa)

Eu apenas os descomentei e salve o arquivo, em seguida, reinstale o mysql com

sudo service mysql restart

Execute várias consultas, abra o arquivo acima (/var/log/mysql/mysql.log) e o log estava lá :)


embora possa funcionar para você, não funciona para mim, mesmo as principais exceções como "Índice corrompido" não são registradas. Somente problemas de inicialização e desligamento.
precisa saber é o seguinte

8

No manual de referência do MySQL:

Por padrão, todos os arquivos de log são criados no diretório de dados.

Verifique a /var/lib/mysqlpasta.


1
mas não consigo abrir a pasta mysql. Eu acho que o caminho do arquivo de log é /var/log/mysql/mysql.log, mas não consigo abri-lo, o que devo fazer?
Arjun

2
como me tornar root, acho que sou proprietário, instalo o servidor, defino a senha, portanto devo ser o proprietário, ainda assim está bloqueado para mim, como posso abri-lo?
Arjun

1
Forcei o cd a esse diretório (tive que criar um usuário root, que apaguei mais tarde), mas quando vejo esses arquivos, pensei que eles estavam criptografados :) Então, acho que não é um bom caminho.
Linha

use sudo -sentão tente ir para a pasta mysql.
Rashedul Islam

o manual do MySQL está cheio de inúmeras inconsistências, de qualquer forma, não existe esse diretório no Windows.
user3338098

3

Para complementar a resposta do loyola , vale ressaltar que a partir do MySQL 5.1 log_slow_queriesestá obsoleta e é substituída porslow-query-log

O uso log_slow_queriesfará com que você service mysql restartou service mysql startfalhe


1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory

7
Bem-vindo ao stackoverflow. Por favor, considere dar uma explicação mais detalhada de como o código em sua resposta é relevante para a pergunta do OP. Além disso, o código deve ser recuado por 4 espaços para permitir a formatação correta.
precisa saber é o seguinte

1

Além das respostas acima, você pode passar parâmetros de linha de comando para o processo mysqld para opções de registro em vez de editar manualmente seu arquivo conf. Por exemplo, para ativar o log geral e especificar um arquivo:

mysqld --general-log --general-log-file=/var/log/mysql.general.log

A confirmação de outras respostas acima mysqld --help --verbosefornece os valores do arquivo conf (a execução das opções da linha de comandos general-log é FALSE); considerando que mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log:

general_log     ON
general_log_file        /var/log/mysql.general.log

Use uma sintaxe um pouco mais compacta para o log de erros:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.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.