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.
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 mysqld
kann 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.cnf
Datei 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.
mysqladmin variables
ist jetzt der bevorzugte Befehl zum Abrufen des aktuellen Werts, anstattmysqld
Es gibt drei Arten von MySQL / MariaDB-Protokollen:
log_error
für das Fehlermeldungsprotokoll;general_log_file
für die allgemeine Abfrageprotokolldatei (falls aktiviert durchgeneral_log
);slow_query_log_file
für die langsame Abfrageprotokolldatei (falls aktiviert durchslow_query_log
);Überprüfen Sie die Einstellungen und den Speicherort der obigen Protokolle mit diesem Shell-Befehl:
Standardmäßig werden die Protokolle in Ihrem Datenverzeichnis gespeichert. Überprüfen Sie daher den Speicherort mit diesem Shell-Befehl:
Um Ihr Fehlerprotokoll anzuzeigen, können Sie Folgendes ausführen:
Wenn Sie das allgemeine Protokoll aktiviert haben, führen Sie Folgendes aus, um es anzuzeigen:
quelle
Eine andere Möglichkeit, diese Informationen zu finden, ist die Verwendung von
lsof
.Verwenden Sie Activity Monitor, um die PID von zu finden
mysql
, oder verwenden Sieps -ef | grep mysqld
, um sie zu finden.sudo lsof -p PID_OF_MYSQLD
und sehen, welche Dateien MySQL geöffnet hat.quelle
Ich habe eine Weile gebraucht, um das zu finden ... probiere diesen Ort: '
quelle
/usr/local/var/mysql/<USERNAME>.local.err
Quelle: MySQL-Dokumentation
Sie können
mysqlbinlog
die 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
.quelle
Der Ordner, in dem sich dieses Protokoll befindet, ist möglicherweise nicht für Sie zugänglich, ohne Folgendes zu verwenden
sudo
:Wenn Sie zufällig eine große Protokolldatei finden und Time Machine verwenden, lesen Sie möglicherweise Was macht Time Machine? bei Serverfehler.
quelle
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
Sie können die Variablen auch direkt in der Liste festlegen.
Prost!
quelle
/Library/Logs/MySQL.log
quelle