Wie aktiviere ich die MySQL-Funktion, die jede von Clients empfangene SQL-Abfrageanweisung und die Zeit protokolliert, die diese Abfrageanweisung gesendet hat? Kann ich das in phpmyadmin oder NaviCat machen? Wie analysiere ich das Protokoll?
Zuerst Denken Sie daran , dass diese Protokolldatei sehr groß auf einem ausgelasteten Server wachsen kann.
Für MySQL <5.1.29:
Fügen Sie dies /etc/my.cnf
in den [mysqld]
Abschnitt ein, um das Abfrageprotokoll zu aktivieren
log = /path/to/query.log #works for mysql < 5.1.29
Auch um es über die MySQL-Konsole zu aktivieren
SET general_log = 1;
Siehe http://dev.mysql.com/doc/refman/5.1/en/query-log.html
Für MySQL 5.1.29+
Mit MySQL 5.1.29+ ist die log
Option veraltet. Verwenden Sie dies in my.cnf im [mysqld]
Abschnitt, um die Protokolldatei anzugeben und die Protokollierung zu aktivieren :
general_log_file = /path/to/query.log
general_log = 1
Alternativ können Sie die Protokollierung über die MySQL-Konsole aktivieren (Sie müssen auch den Speicherort der Protokolldatei angeben oder den Standardspeicherort suchen):
SET global general_log = 1;
Beachten Sie auch, dass es zusätzliche Optionen gibt, um nur langsame Abfragen zu protokollieren oder solche, die keine Indizes verwenden.
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
Schauen Sie sich diese Antwort auf eine andere verwandte Frage an. Es zeigt, wie Sie die Protokolle auf Live-Servern aktivieren, deaktivieren und anzeigen können, ohne sie neu zu starten.
Protokollieren Sie alle Abfragen in MySQL
Hier ist eine Zusammenfassung:
Wenn Sie den MySQL-Server nicht neu starten möchten oder können, können Sie auf Ihrem laufenden Server folgendermaßen vorgehen:
Erstellen Sie Ihre Protokolltabellen (siehe Antwort )
Aktivieren Sie die Abfrageprotokollierung in der Datenbank (Beachten Sie, dass die Zeichenfolge 'Tabelle' wörtlich gesetzt und nicht durch einen Tabellennamen ersetzt werden sollte. Vielen Dank, Nicholas Pickering )
quelle
Ich verwende diese Methode für die Protokollierung, wenn ich verschiedene Seitenladevorgänge schnell optimieren möchte. Es ist ein kleiner Tipp ...
Anmelden an einer TABELLE
Sie können dann aus meiner
mysql.general_log
Tabelle auswählen , um die letzten Abfragen abzurufen.Ich kann dann etwas Ähnliches wie
tail -f
auf mysql.log tun, aber mit mehr Verfeinerungen ...Dies macht es einfach, meine Fragen zu sehen, die ich versuchen kann, zu reduzieren. Ich verwende ein Intervall von 8 Sekunden, um nur Abfragen abzurufen, die innerhalb der letzten 8 Sekunden ausgeführt wurden.
quelle
Dies war bereits in einem Kommentar, verdient aber eine eigene Antwort: Ohne die Konfigurationsdateien zu bearbeiten: In MySQL als Root tun
Vergessen Sie nicht, es danach auszuschalten:
quelle
/tmp/
, es irgendwo/tmp/systemd-private-...-mariadb.service-.../tmp/
Sie können das allgemeine Abfrageprotokoll (das alle Abfragen protokolliert) mit deaktivieren oder aktivieren
quelle
Ich wollte auch die MySQL-Protokolldatei aktivieren, um die Abfragen anzuzeigen, und habe dies mit den folgenden Anweisungen behoben
/etc/mysql/mysql.conf.d
und aktivieren Sie die folgenden Zeilen
/etc/init.d/mysql restart
/var/log/mysql/
und überprüfen Sie die Protokollequelle
quelle
Unter Windows können Sie einfach zu gehen
Fügen Sie diese Zeile in my.ini ein
Die my.ini- Datei sieht endlich so aus
quelle
Es gibt einen Fehler in der MySQL 5.6-Version. Sogar mysqld zeigen als:
Die tatsächlichen Einstellungen werden in der folgenden Reihenfolge angezeigt:
Überprüfen Sie die Datei: "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini"
Hoffe es hilft jemandem.
quelle
für mysql> = 5.5 nur für langsame Abfragen (1 Sekunde und mehr) my.cfg
quelle
So aktivieren Sie das Abfrageprotokoll in MAC Machine:
Öffnen Sie die folgende Datei:
Stellen Sie die URL des Abfrageprotokolls im Abschnitt 'mysqld' wie folgt ein:
Nur wenige Computer protokollieren Abfragen nicht ordnungsgemäß. In diesem Fall können Sie sie über die MySQL-Konsole aktivieren
quelle
Nicht gerade eine Antwort auf die Frage, da die Frage bereits gute Antworten hat. Dies ist eine Nebeninformation. Durch das Aktivieren von general_log wird die MySQL-Leistung erheblich beeinträchtigt. Ich bin
general_log =1
versehentlich auf einem Produktionsserver abgereist und habe stundenlang herausgefunden, warum die Leistung nicht mit einem ähnlichen Setup auf anderen Servern vergleichbar ist. Dann habe ich dies gefunden, was die Auswirkungen der Aktivierung des allgemeinen Protokolls erklärt. http://www.fromdual.com/general_query_log_vs_mysql_performance .Kern der Geschichte, nicht
general_log=1
in die.cnf
Akte eintragen. Verwendenset global general_log =1
Sie es stattdessen für eine kurze Zeit, um sich zu protokollieren und herauszufinden, was Sie herausfinden möchten, und schalten Sie es dann aus.quelle
In phpMyAdmin 4.0 gehen Sie zu Status> Monitor. Dort können Sie das langsame Abfrageprotokoll und das allgemeine Protokoll aktivieren, einen Live-Monitor anzeigen, einen Teil des Diagramms auswählen, die zugehörigen Abfragen anzeigen und analysieren.
quelle
Ich musste das allgemeine Protokoll irgendwann löschen und neu erstellen. Während der Neuerstellung wurden die Zeichensätze durcheinander gebracht und ich hatte diesen Fehler in den Protokollen:
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'
Wenn die Standardantwort "Überprüfen, ob die Protokollierung aktiviert ist" für Sie nicht funktioniert, überprüfen Sie, ob Ihre Felder den richtigen Zeichensatz haben.
quelle