Frage Wo ist mein MySQL-Log auf OS X?


Ich überprüfte / var / log und / usr / local / mysql und ich kann nicht scheinen, das Protokoll zu finden. Ich versuche, einen Fehler zu beheben, der eine Datenbankverbindung mit einer php Funktion herstellt.


66
2017-07-18 15:58


Ursprung




Antworten:


Wie Chealion bereits erwähnt hat, gibt es mehrere Möglichkeiten, wie dein MySQL installiert sein könnte. Jeder von ihnen wird Ihre Daten dir und / oder an verschiedenen Orten anmelden. 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

Kannst du bitte das Ergebnis dieses Befehls 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

Von diesem können Sie sehen, dass mein datadir ist /opt/local/var/db/mysql (weil ich über MacPorts installiert habe). Lassen Sie uns diese Lektion ein wenig weiter bringen ...

Von der ersten Zeile aus können Sie sehen, dass mein Daemon ist /opt/local/libexec/mysqld. Das mysqld kann mit gerufen 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, anstatt nur die Hilfeausgabe zu überprüfen. Die Werte sind das Ergebnis Ihrer Kompilierzeitkonfiguration, my.cnf Datei und alle Befehlszeilenoptionen. Ich kann diese Funktion nutzen, um GENAU herauszufinden, wo meine Log-Dateien sind:

/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 in der Welt würden mir nicht helfen, da meine Log-Datei an einem völlig anderen Ort aufbewahrt wird! Ich halte meinen drin /tmp/ denn auf meinem Laptop ist es mir egal (eigentlich bevorzuge ich), alle meine Logs beim Neustart zu verlieren.

Lass uns alles zusammensetzen und dich zu einem Oneliner machen:

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

Führen Sie diesen einen Befehl aus, und Sie erhalten eine Liste aller Protokolle für Ihre laufende mysql-Instanz.

Genießen!

Dieses Bash-Fu wurde dir kostenlos zur Verfügung gestellt durch mein Engagement für alle Dinge Open Source.


85
2017-07-20 17:06



mysqladmin variables ist nun der bevorzugte Befehl, um den aktuellen Wert zu erhalten, anstatt ihn direkt zu verwenden mysqld - John Cummings
@ JohnCummings, Quelle? - Pacerier
Heute habe ich eine Abstimmung 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 sorgst du um zu erarbeiten? Ich habe keinen Zugriff mehr auf MacOS. - Bruno Bronosky


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

  1. Verwenden Sie den Aktivitätsmonitor, um die PID von zu finden mysqloder verwenden ps -ef | grep mysqld es zu finden.

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


9
2017-10-29 14:30





Es gibt 3 Arten von MySQL / MariaDB-Logs:

  • log_error für das Fehlermeldungslog;
  • general_log_file für die allgemeine Abfrageprotokolldatei (falls aktiviert durch general_log);
  • slow_query_log_file fü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 anhand dieses Shell-Befehls:

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)")

8
2018-06-09 15:09





Nahm mich eine Weile, um das zu finden ... versuchen Sie diesen Ort: '

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

5
2017-07-25 15:32



Mein war drin /usr/local/var/mysql/<USERNAME>.local.err - jonnysamps


Standardmäßig werden alle Protokolldateien im Verzeichnis mysqld data erstellt.

Quelle: MySQL Dokumentation

Sie können verwenden mysqlbinlog Die binären Protokolldateien in / usr / local / mysql / data / zu lesen (in meiner Installation waren nicht alle binär). Einige Fehler werden einfach zu stderr gerichtet, also möchten Sie vielleicht überprüfen /var/log/system.log auch.


3
2017-07-18 16:10



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 zu sehen? wie ein phpinfo () - Tony
Wie hast du MySQL installiert? Der vorinstallierte MySQL mit Mac OS X Server, MacPorts oder dem offiziellen MySQL-Paket? - Chealion


Der Ordner, der dieses Protokoll enthält, ist möglicherweise nicht ohne Verwendung von Ihnen zugänglich 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 eine große Protokolldatei finden und wenn Sie Time Machine verwenden, möchten Sie vielleicht lesen Was macht Time Machine? auf Serverfehler.


0
2017-07-18 16:59



Ich habe kein Datenverzeichnis in / usr / local / mysql - Tony


/Library/Logs/MySQL.log


-1
2017-07-18 16:53



Ich sehe andere Protokolle dort, aber nicht mysql - Tony
Welche Version von Mac OS X Server ist das? Im Allgemeinen sollten Sie in / var / log / & / Library / Logs / unter Mac OS X Server suchen. Spezifischer für dieses Problem, watch /var/log/system.log, kann etwas in / var / mysql (wie die .err-Log-Dateien) verwendet werden, aber ich (auf der Leopard Server-Standardkonfiguration) habe auch die oben genannten / Bibliothek / Protokolle / MySQL.log. Versuchen Sie eine Verbindung über den Socket oder eine Netzwerkverbindung herzustellen? Wenn Letzteres, hast du "Netzwerkverbindungen aktivieren" in Server Admin (auf Leopard; In Tiger war es eine separate Anwendung in / Programme / Dienstprogramme)? - morgant