Wo ist mein MySQL-Log in OS X?

74

Ich habe / var / log und / usr / local / mysql überprüft und kann das Protokoll anscheinend nicht finden. Ich versuche, einen Fehler beim Herstellen einer Datenbankverbindung mit einer PHP-Funktion zu beheben.

Tony
quelle

Antworten:

95

Wie Chealion bereits erwähnte, gibt es verschiedene Möglichkeiten, wie Ihr MySQL installiert werden könnte. Jedes von ihnen legt Ihr Datenverzeichnis und / oder Ihre Protokolle an verschiedenen Orten ab. Der folgende Befehl gibt Ihnen (und uns) einen guten Hinweis darauf, wo Sie suchen müssen.

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

Können Sie das Ergebnis dieses Befehls bitte hier posten? Meins sieht so aus:

_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

Daran können Sie sehen, dass mein Datadir ist /opt/local/var/db/mysql(weil ich über MacPorts installiert habe). Lassen Sie uns diese Lektion etwas weiter führen ...

In der ersten Zeile sehen Sie den my daemon /opt/local/libexec/mysqld. Das mysqldkann mit aufgerufen werden --verbose --help, um eine Liste aller Befehlszeilenoptionen zu erhalten (und hier ist der wichtige / wertvolle Teil!), Gefolgt von den Werten, die verwendet würden, wenn Sie mysqld starten würden, anstatt nur die Hilfeausgabe zu überprüfen. Die Werte sind das Ergebnis Ihrer Konfiguration zur Kompilierungszeit, Ihrer my.cnfDatei und aller Befehlszeilenoptionen. Ich kann diese Funktion ausnutzen, um GENAU herauszufinden, wo sich meine Protokolldateien befinden:

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

Meins sieht so aus:

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

SIEHE DA! Alle Ratschläge auf der Welt würden mir nicht helfen, da sich meine Protokolldatei an einem völlig ungewöhnlichen Ort befindet! Ich behalte meine /tmp/auf meinem Laptop, weil es mir egal ist (eigentlich bevorzuge ich), alle meine Protokolle beim Neustart zu verlieren.

Lassen Sie uns alles zusammenfügen und Sie zu einem Oneliner machen:

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

Wenn Sie diesen einen Befehl ausführen, erhalten Sie eine Liste aller Protokolle für Ihre laufende Instanz von mysql.

Genießen!

Dieser Bash-Fu wurde Ihnen kostenlos zur Verfügung gestellt, weil ich mich für Open Source entschieden habe.

Bruno Bronosky
quelle
2
mysqladmin variablesist jetzt der bevorzugte Befehl zum Abrufen des aktuellen Werts, anstattmysqld
John Cummings
@ JohnCummings, Quelle?
Pacerier
Heute habe ich eine Gegenstimme ohne Kommentare bekommen. Ich behalte alle meine Antworten bei. Sogar diejenigen, die 10 Jahre alt sind. Du hilfst niemandem, indem du abstimmst. Hinterlasse einen Kommentar!
Bruno Bronosky
@ jm3 ausarbeiten wollen? Ich habe keinen Zugriff mehr auf MacOS.
Bruno Bronosky
12

Es gibt drei Arten von MySQL / MariaDB-Protokollen:

  • log_error für das Fehlermeldungsprotokoll;
  • general_log_filefür die allgemeine Abfrageprotokolldatei (falls aktiviert durch general_log);
  • slow_query_log_filefür die langsame Abfrageprotokolldatei (falls aktiviert durch slow_query_log);

Überprüfen Sie die Einstellungen und den Speicherort der obigen Protokolle mit diesem Shell-Befehl:

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

Standardmäßig werden die Protokolle in Ihrem Datenverzeichnis gespeichert. Überprüfen Sie daher den Speicherort mit diesem Shell-Befehl:

mysql -se "SELECT @@datadir"

Um Ihr Fehlerprotokoll anzuzeigen, können Sie Folgendes ausführen:

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

Wenn Sie das allgemeine Protokoll aktiviert haben, führen Sie Folgendes aus, um es anzuzeigen:

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

Eine andere Möglichkeit, diese Informationen zu finden, ist die Verwendung von lsof.

  1. Verwenden Sie Activity Monitor, um die PID von zu finden mysql, oder verwenden Sie ps -ef | grep mysqld, um sie zu finden.

  2. sudo lsof -p PID_OF_MYSQLD und sehen, welche Dateien MySQL geöffnet hat.

tobym
quelle
6

Ich habe eine Weile gebraucht, um das zu finden ... probiere diesen Ort: '

sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err
Mark Shust
quelle
3
Meins war in/usr/local/var/mysql/<USERNAME>.local.err
jonnysamps
3

Standardmäßig werden alle Protokolldateien im mysqld-Datenverzeichnis erstellt.

Quelle: MySQL-Dokumentation

Sie können mysqlbinlogdie binären Protokolldateien in / usr / local / mysql / data / lesen (in meiner Installation waren nicht alle binär). Einige Fehler werden einfach an stderr weitergeleitet, daher sollten Sie dies auch überprüfen /var/log/system.log.

Chealion
quelle
Ich habe kein Datenverzeichnis im MySQL-Verzeichnis. Ich habe das Verzeichnis / usr / local / mysql / durchsucht und kann das Protokoll nicht finden. gibt es keine möglichkeit die mysql konfiguration anzusehen? wie ein phpinfo ()
Tony
Wie haben Sie MySQL installiert? Das auf Mac OS X Server, MacPorts oder dem offiziellen MySQL-Paket vorinstallierte MySQL?
Chealion
0

Der Ordner, in dem sich dieses Protokoll befindet, ist möglicherweise nicht für Sie zugänglich, ohne Folgendes zu verwenden sudo:

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

Wenn Sie zufällig eine große Protokolldatei finden und Time Machine verwenden, lesen Sie möglicherweise Was macht Time Machine? bei Serverfehler.

Arjan
quelle
Ich habe keine Daten dir in / usr / local / MySQL
Tony
0

Standardmäßig werden alle Protokolldateien im mysqld-Datenverzeichnis erstellt. Leider legen viele Leute ihre Protokolldateien (und Programme) nicht an ihren typischen Speicherorten ab. Ich bin einer von ihnen!

Ich habe diese Routine selbst mit MySQL durchlaufen, bis ich Navicat für MySQL ausprobiert habe . Später habe ich ein Upgrade auf Navicat Premium durchgeführt . Beide verfügen über ein Überwachungstool, das eine Registerkarte mit allen Servervariablen in einer umfassenden Liste enthält. Hier ist ein Screenshot mit der Servervariablen log_error:

Servervariable log_error im Navicat Server Monitoring Tool

Servervariable log_error im Navicat Server Monitoring Tool

Sie können die Variablen auch direkt in der Liste festlegen.

Prost!

Rob Gravelle
quelle
-2

/Library/Logs/MySQL.log

morgant
quelle
Ich sehe andere Protokolle dort, aber nicht MySQL
Tony
Welche Version von Mac OS X Server ist das? Im Allgemeinen sollten Sie unter Mac OS X Server unter / var / log / & / Library / Logs / nachsehen. Genauer gesagt, beobachten Sie /var/log/system.log. Möglicherweise enthält / var / mysql (wie die .err-Protokolldateien) etwas Nützliches. Bibliothek / Logs / MySQL.log. Versuchen Sie, eine Verbindung über die Steckdose oder eine Netzwerkverbindung herzustellen? Wenn dies der Fall ist, haben Sie in Server Admin "Netzwerkverbindungen aktivieren" (auf Leopard; in Tiger war es eine separate App in / Applications / Utilities)?
Morgant