Como habilitar o log do MySQL?

36

Estou executando o MySQL 5.0.45 no OS X 10.6.1 e não consigo fazer com que o MySQL registre nada. Estou depurando um aplicativo e preciso ver todas as consultas e erros.

eu adicionei ao etc / my.cnf:

[mysqld]
bind-address = 127.0.0.1
log = /var/log/mysqld.log
log-error = /var/log/mysqld.error.log

Eu usei sudo para criar dois arquivos de log, definir permissões para 644 e reiniciei o MySQL.

Eu me referi a Onde meu mysql está logado no OS X? para solucionar problemas.

Em exibição:

ps auxww|grep [m]ysqld

Retorna:

_mysql      71   0.0  0.8   646996  15996   ??  S     7:31PM   0:01.10 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/Macintosh-41.local.pid
_mysql      46   0.0  0.0   600336    744   ??  Ss    7:30PM   0:00.03 /bin/sh /usr/local/mysql/bin/mysqld_safe

e em execução:

$(ps auxww|sed -n '/sed -n/d;/mysqld /{s/.* \([^ ]*mysqld\) .*//;p;}') --verbose --help|grep '^log'

Retorna:

log                               /var/log/mysqld.log
log-bin                           (No default value)
log-bin-index                     (No default value)
log-bin-trust-function-creators   FALSE
log-bin-trust-routine-creators    FALSE
log-error                         /var/log/mysqld.error.log
log-isam                          myisam.log
log-queries-not-using-indexes     FALSE
log-short-format                  FALSE
log-slave-updates                 FALSE
log-slow-admin-statements         FALSE
log-slow-queries                  (No default value)
log-tc                            tc.log
log-tc-size                       24576
log-update                        (No default value)
log-warnings                      1

Em exibição:

mysql> show variables like '%log%';

Retorna:

+---------------------------------+---------------------------+
| Variable_name                   | Value                     |
+---------------------------------+---------------------------+
| back_log                        | 50                        | 
| binlog_cache_size               | 32768                     | 
| expire_logs_days                | 0                         | 
| innodb_flush_log_at_trx_commit  | 1                         | 
| innodb_locks_unsafe_for_binlog  | OFF                       | 
| innodb_log_arch_dir             |                           | 
| innodb_log_archive              | OFF                       | 
| innodb_log_buffer_size          | 1048576                   | 
| innodb_log_file_size            | 5242880                   | 
| innodb_log_files_in_group       | 2                         | 
| innodb_log_group_home_dir       | ./                        | 
| innodb_mirrored_log_groups      | 1                         | 
| log                             | ON                        | 
| log_bin                         | OFF                       | 
| log_bin_trust_function_creators | OFF                       | 
| log_error                       | /var/log/mysqld.error.log | 
| log_queries_not_using_indexes   | OFF                       | 
| log_slave_updates               | OFF                       | 
| log_slow_queries                | OFF                       | 
| log_warnings                    | 1                         | 
| max_binlog_cache_size           | 4294967295                | 
| max_binlog_size                 | 1073741824                | 
| max_relay_log_size              | 0                         | 
| relay_log_purge                 | ON                        | 
| relay_log_space_limit           | 0                         | 
| sync_binlog                     | 0                         | 
+---------------------------------+---------------------------+
26 rows in set (0.00 sec)

Alguma ajuda sobre como eu posso fazer o MySQL logar?

    
por RyOnLife 04.10.2009 / 02:11

5 respostas

22

Mesmo que você tenha usado chmod 644 , tenha certeza que o mysql é o dono dos logs.

touch /var/log/mysql.log
chown mysql:mysql /var/log/mysql.log
touch /var/log/mysql.error.log
chown mysql:mysql /var/log/mysql.error.log

Em seguida, reinicie o mysqld.

Em seguida, faça o login no mysql e execute:

mysql> show variables like '%log%';

Veja os valores de general_log , general_log_file , log , log_error , etc.

Ligue-os conforme necessário e execute mysqladmin flushlogs conforme necessário.

    
por 05.10.2009 / 05:27
13

Para ativar os arquivos de log, você precisa ter certeza de que uma ou mais das seguintes diretivas estão na seção [mysqld] do arquivo de configuração principal do seu servidor mysql ( /etc/my.cnf no meu):

[mysqld]
log-bin
log
log-error
log-slow-queries

Os logs serão criados, por padrão, no mesmo diretório de dados que contém os próprios subdiretórios do banco de dados (normalmente /var/lib/mysql ) e os nomes dos arquivos de log padrão para o nome do host seguido por um sufixo que corresponda aos nomes das diretivas acima -bin, -slow-queries, etc).

Para manter seus registros em um caminho diferente ou usar nomes de arquivos diferentes, especifique o nome base seguindo a diretiva log= e qualquer caminho e nome de arquivo desejados, por exemplo:

[mysqld]
log-bin=/var/log/mysql-bin.log
log=/var/log/mysql.log
log-error=/var/log/mysql-error.log
log-slow-queries=/var/log/mysql-slowquery.log

Você precisa reiniciar o mysqld para que estas mudanças entrem em vigor.

    
por 30.03.2011 / 16:33
6

As respostas anteriores estavam fora datadas. Você pode procurar o arquivo de configuração em /etc/my.cnf ou no windows ./mysql/my.ini .

Na seção [mysqld] , adicione

log_bin
general_log
log_error

A documentação do windows informa que os logs são armazenados em ProgramData/MySQL/MySQL Server 5.6/ . Ignore porque é mentira.

Além disso, a opção log recomendada é depreciada e resulta no erro

ambiguous option '--log' (log-bin, log_slave_updates)

sendo logado em ./mysql/data/host.err e o daemon silenciosamente morrendo. A configuração correta é general-log .

Também log-slow-queries não é válido e causou o erro

C:\mysql\bin\mysqld.exe: unknown option '--log-slow-queries'

Portanto, certifique-se de ficar longe disso também.

    
por 28.04.2015 / 17:49
2

Digite a linha de comando mysql com super privilégios e execute:

SET GLOBAL general_log_file = '/var/log/mysql/mysql.log'; 

No meu caso, não importava se eu já tivesse essa variável configurada com o mesmo valor! Além disso, eu mudei as permissões e o dono do arquivo como mencionado nos outros posts.

    
por 07.09.2011 / 14:13
1

Tente configurações de log diferentes em my.cnf. No meu caso eu precisava:

general_log = on

general_log_file=/var/log/mysql/mysql.log
    
por 05.08.2016 / 14:34