Dov'è il mio registro mysql su OS X?


74

Ho controllato / var / log e / usr / local / mysql e non riesco a trovare il registro. Sto cercando di risolvere un errore che stabilisce una connessione al database con una funzione php.

Risposte:


95

Come accennato da Chealion, ci sono diversi modi in cui il tuo mysql avrebbe potuto essere installato. Ognuno dei quali posizionerà la tua directory dei dati e / o i log in posizioni diverse. Il seguente comando ti darà (e noi) una buona indicazione di dove cercare.

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

Puoi pubblicare il risultato di quel comando qui per favore? Il mio assomiglia a questo:

_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

Da questo puoi vedere che il mio datadir è /opt/local/var/db/mysql(perché ho installato tramite MacPorts). Prendiamo questa lezione un po 'oltre ...

Dalla prima riga puoi vedere il mio demone è /opt/local/libexec/mysqld. La mysqldpuò essere chiamato con --verbose --helpper ottenere una lista di tutte le opzioni della riga di comando (e qui è la parte importante / prezioso!) Seguita dai valori che sarebbero stati utilizzati se si stesse avviando mysqld invece di controllare l'output di aiuto. I valori sono il risultato della configurazione del tempo di compilazione, del my.cnffile e di tutte le opzioni della riga di comando. Posso sfruttare questa funzione per scoprire ESATTAMENTE dove sono i miei file di registro, in questo modo:

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

Il mio assomiglia a questo:

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! tutti i consigli del mondo non mi avrebbero aiutato perché il mio file di registro è conservato in una posizione completamente non standard! Tengo il mio /tmp/perché sul mio laptop non mi interessa (in realtà preferisco) perdere tutti i miei log al riavvio.

Mettiamo tutto insieme e rendiamoci un oneliner:

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

Esegui quel comando e otterrai un elenco di tutti i registri per l'istanza corrente di mysql.

Godere!

Questo Bash-Fu offerto gratuitamente dal mio impegno per tutte le cose Open Source.


2
mysqladmin variablesè ora il comando preferito per ottenere il valore corrente invece di usarlo direttamentemysqld
John Cummings

@JohnCummings, Source?
Pacerier

Oggi ho ottenuto un voto negativo senza commenti. Mantengo tutte le mie risposte. Anche quelli che hanno 10 anni. Non stai aiutando nessuno con il voto negativo. Lascia un commento!
Bruno Bronosky,

@ jm3 cura di elaborare? Non ho più accesso a MacOS.
Bruno Bronosky,

12

Esistono 3 tipi di registri MySQL / MariaDB:

  • log_error per il registro dei messaggi di errore;
  • general_log_fileper il file di registro delle query generale (se abilitato da general_log);
  • slow_query_log_fileper il file di registro delle query lente (se abilitato da slow_query_log);

Controllare le impostazioni e la posizione dei registri sopra con questo comando shell:

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

Per impostazione predefinita, i log sono memorizzati nella tua directory dei dati, quindi controlla la posizione con questo comando shell:

mysql -se "SELECT @@datadir"

Per visualizzare il registro degli errori, è possibile eseguire:

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

Se hai abilitato il registro generale, per visualizzarlo, esegui:

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

10

Un altro modo per trovare queste informazioni è usare lsof.

  1. Utilizzare Activity Monitor per trovare il PID mysqlo utilizzarlo ps -ef | grep mysqldper trovarlo.

  2. sudo lsof -p PID_OF_MYSQLD e vedere quali file MySQL ha aperto.


6

Mi sono preso un po 'di tempo per trovare questo ... prova questa posizione: "

sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err

3
Il mio era in/usr/local/var/mysql/<USERNAME>.local.err
jonnysamps il

3

Per impostazione predefinita, tutti i file di registro vengono creati nella directory dei dati mysqld.

Fonte: documentazione MySQL

Puoi usare mysqlbinlogper leggere i file di registro binari in / usr / local / mysql / data / (nella mia installazione non tutti erano binari). Alcuni errori sono semplicemente diretti a stderr, quindi potresti voler controllare /var/log/system.loganche.


non ho una directory di dati nella directory mysql. ho cercato in tutta la directory / usr / local / mysql / e non riesco a trovare il registro. non c'è modo di visualizzare la configurazione mysql? like a phpinfo ()
Tony

Come hai installato MySQL? MySQL preinstallato con Mac OS X Server, MacPorts o il pacchetto MySQL ufficiale?
Chealion,

0

La cartella che contiene quel registro potrebbe non essere accessibile a te senza usare 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 ti capita di trovare un file di registro di grandi dimensioni e quando stai usando Time Machine, potresti voler leggere Cosa sta facendo Time Machine? in caso di errore del server.


non ho dati dir in / usr / local / mysql
Tony

0

Per impostazione predefinita, tutti i file di registro vengono creati nella directory dei dati mysqld. Sfortunatamente, molte persone non mettono i loro file di registro (e programmi) nelle loro posizioni tipiche. Sono uno di loro!

Ho seguito questa routine con MySQL fino a quando non ho provato Navicat per MySQL . Successivamente ho eseguito l' aggiornamento a Navicat Premium . Entrambi hanno uno strumento di monitoraggio che contiene una scheda con tutte le variabili del server in un elenco completo. Ecco uno screenshot con la variabile del server log_error:

variabile server log_error in Navicat Server Monitoring Tool

variabile server log_error in Navicat Server Monitoring Tool

Puoi anche impostare le variabili proprio lì nell'elenco.

Saluti!


-2

/Library/Logs/MySQL.log


vedo altri log lì dentro, ma non mysql
Tony

Quale versione di Mac OS X Server è questa? In generale, ti consigliamo di cercare in / var / log / & / Library / Logs / sotto Mac OS X Server. Più specifico a questo problema, guarda /var/log/system.log, potrebbe esserci qualcosa di utile in / var / mysql (come i file di registro .err), ma io (nella configurazione predefinita di Leopard Server) ho anche il suddetto / library / Logs / MySQL.log. Stai provando a connetterti tramite il socket o una connessione di rete? In quest'ultimo caso, hai abilitato "Abilita connessioni di rete" in Server Admin (su Leopard; In Tiger era un'app separata in / Applicazioni / Utility)?
perdente,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.