Onde está o meu log do mysql no OS X?

74

Eu verifiquei / var / log e / usr / local / mysql e não consigo encontrar o log. Estou tentando solucionar um erro ao estabelecer uma conexão com o banco de dados com uma função php.

Tony
fonte

Respostas:

95

Como o Chealion mencionou, existem várias maneiras pelas quais o mysql poderia ter sido instalado. Cada um dos quais colocará seu diretório de dados e / ou logs em locais diferentes. O comando a seguir fornecerá a você (e a nós) uma boa indicação de onde procurar.

ps auxww|grep [m]ysqld

# Putting brackets around the first char is a `grep`+`ps` trick
# to keep it from matching its own process.
# Note: For zsh compatibility put quotes around the grep regex

Você pode postar o resultado desse comando aqui, por favor? O meu fica assim:

_mysql     101   0.0  0.3   112104  13268   ??  S    12:30AM   0:13.20 /opt/local/libexec/mysqld --basedir=/opt/local --datadir=/opt/local/var/db/mysql --user=mysql --pid-file=/opt/local/var/db/mysql/rbronosky-mbp.pid
root        76   0.0  0.0   600172    688   ??  S    12:30AM   0:00.02 /bin/sh /opt/local/lib/mysql/bin/mysqld_safe --datadir=/opt/local/var/db/mysql --pid-file=/opt/local/var/db/mysql/rbronosky-mbp.pid

A partir disso, você pode ver que meu datadir é /opt/local/var/db/mysql(porque eu instalei via MacPorts). Vamos levar essa lição um pouco mais longe ...

Na primeira linha, você pode ver o meu daemon /opt/local/libexec/mysqld. O mysqldpode ser chamado com --verbose --helppara obter uma lista de todas as opções de linha de comando (e aqui é a parte importante / importante!), Seguido pelos valores que seriam utilizados se estivesse lançando mysqld em vez de apenas verificar a saída de ajuda. Os valores são o resultado da sua configuração de tempo de compilação, my.cnfarquivo e qualquer opção de linha de comando. Eu posso explorar esse recurso para descobrir EXATAMENTE onde estão meus arquivos de log, assim:

/opt/local/libexec/mysqld --verbose --help|grep '^log'

O meu fica assim:

log                               /tmp/mysql.log
log-bin                           /tmp/mysql-bin
log-bin-index                     (No default value)
log-bin-trust-function-creators   FALSE
log-bin-trust-routine-creators    FALSE
log-error                         /tmp/mysql.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

LO E BEHOLD! todos os conselhos do mundo não me ajudariam porque meu arquivo de log é mantido em um local completamente fora do padrão! Eu mantenho o meu /tmp/porque, no meu laptop, não me importo (na verdade prefiro) de perder todos os meus logs na reinicialização.

Vamos juntar tudo e fazer de você um oneliner:

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

Execute esse comando e você obterá uma lista de todos os logs para sua instância em execução do mysql.

Desfrutar!

Este Bash-Fu trouxe para você de graça pelo meu compromisso com todas as coisas Open Source.

Bruno Bronosky
fonte
2
mysqladmin variablesé agora o comando preferido para obter o valor atual em vez de diretamente usandomysqld
John Cummings
@JohnCummings, Source?
Pacerier
Hoje recebi uma votação sem comentários. Eu mantenho todas as minhas respostas. Mesmo os que têm 10 anos. Você não está ajudando ninguém votando negativamente. Deixe um comentário!
Bruno Bronosky
@ jm3 gostaria de elaborar? Não tenho mais acesso ao MacOS.
Bruno Bronosky
12

Existem 3 tipos de logs do MySQL / MariaDB:

  • 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);

Verifique as configurações e o local dos logs acima por este comando do shell:

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

Por padrão, os logs são armazenados em seu diretório de dados, portanto, verifique a localização com este comando shell:

mysql -se "SELECT @@datadir"

Para visualizar seu log de erros, você pode executar:

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

Se você tiver ativado o log geral, para visualizá-lo, execute:

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

Outra maneira de encontrar essas informações é usar lsof.

  1. Use o Monitor de Atividade para encontrar o PID de mysqlou use-o ps -ef | grep mysqldpara encontrá-lo.

  2. sudo lsof -p PID_OF_MYSQLD e veja quais arquivos o MySQL abriu.

tobym
fonte
6

Demorei um pouco para encontrar isso ... tente este local: '

sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err
Mark Shust
fonte
3
O meu estava em/usr/local/var/mysql/<USERNAME>.local.err
jonnysamps
3

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

Fonte: Documentação MySQL

Você pode usar mysqlbinlogpara ler os arquivos de log binários em / usr / local / mysql / data / (na minha instalação nem todos eram binários). Alguns erros são simplesmente direcionados ao stderr, então você também pode verificar /var/log/system.log.

Chealion
fonte
Eu não tenho um diretório de dados no diretório mysql. Eu procurei por todo o diretório / usr / local / mysql / e não consigo encontrar o log. não há como ver a configuração do mysql? como um phpinfo ()
Tony
Como você instalou o MySQL? O MySQL pré-instalado com o Mac OS X Server, o MacPorts ou o pacote oficial do MySQL?
Chealion
0

A pasta que contém esse log pode não estar acessível para você sem usar sudo:

sudo ls -l "/usr/local/mysql-5.0.51a-osx10.5-x86"
[..]
drwxr-x---   4 _mysql  wheel    136 Jul 10 23:06 data

Se você encontrar um arquivo de log grande e quando estiver usando o Time Machine, poderá ler O que o Time Machine está fazendo? na falha do servidor.

Arjan
fonte
eu não tenho nenhuma dir dados em / usr / local / mysql
Tony
0

Por padrão, todos os arquivos de log são criados no diretório de dados do mysqld. Infelizmente, muitas pessoas não colocam seus arquivos de log (e programas) em seus locais típicos. Eu sou um deles!

Eu mesmo passei por essa rotina com o MySQL até experimentar o Navicat for MySQL . Mais tarde, atualizei para o Navicat Premium . Ambos têm uma ferramenta de monitoramento que contém uma guia com todas as variáveis ​​do servidor em uma lista abrangente. Aqui está uma captura de tela com a variável do servidor log_error:

variável de servidor log_error na ferramenta de monitoramento do Navicat Server

variável de servidor log_error na ferramenta de monitoramento do Navicat Server

Você também pode definir as variáveis ​​ali na lista.

Felicidades!

Rob Gravelle
fonte
-2

/Library/Logs/MySQL.log

morgante
fonte
i ver outros logs lá, mas não mysql
Tony
Que versão do Mac OS X Server é essa? Em geral, você deve procurar em / var / log / & / Library / Logs / no Mac OS X Server. Mais específico a esse problema, assista a /var/log/system.log, pode haver algo de útil em / var / mysql (como os arquivos de log .err), mas eu (na configuração padrão do Leopard Server) também tenho o / Biblioteca / Logs / MySQL.log. Você está tentando se conectar através do soquete ou de uma conexão de rede? Nesse último caso, você "Ativou as conexões de rede" no Server Admin (no Leopard; no Tiger, era um aplicativo separado em / Aplicativos / Utilitários)?
Morgant