In beiden Fällen werden alle Abfragen unter log_file_name protokolliert.
Sie können auch nur langsame Abfragen mit der --log-slow-queriesOption anstelle von protokollieren --log. Standardmäßig werden Abfragen, die 10 Sekunden oder länger dauern, als langsam angesehen. Sie können dies ändern, indem Sie long_query_timedie Anzahl der Sekunden festlegen, die eine Abfrage benötigt, um ausgeführt zu werden, bevor sie protokolliert wird.
Es sollte selbstverständlich sein, aber wenn dies in einer Produktionsbox eingeschaltet bleibt, wird es sehr schnell nicht unterhaltsam. g
ceejayoz
6
Wenn Sie Probleme haben, die Protokollierung auf diese Weise zu aktivieren, überprüfen Sie doppelt, ob der MySQL-Benutzer an den entsprechenden Dateispeicherort schreiben kann.
Jon Topper
3
Ist es möglich, Abfragen nur über 1 bestimmte Datenbank / Tabelle zu protokollieren?
Temujin
2
@Temujin phpmyadmin verfügt jetzt über eine Verfolgungsoption für Tabellen, in denen Sie ein Protokoll ('Version') angeben, und zeichnet die betroffenen Abfragen mit Informationen zur Zeit und zur gesamten Abfrage auf.
Gadget00
3
Diese akzeptierte Antwort sollte gelöscht oder bearbeitet werden, um der Tatsache Rechnung zu tragen, dass sie mit MySQL 5.6 nicht funktioniert. +.
Itoctopus
233
( Hinweis : Für MySQL-5.6 + funktioniert dies nicht. Es gibt eine Lösung, die für MySQL-5.6 + gilt, wenn Sie nach unten scrollen oder hier klicken .)
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 in der mysqlDatenbank
Ich bin nicht sicher, ob dies für jede Version von MySQL gilt (ich bin auf 5.5), aber ich musste die Tabellen nicht erstellen. Ich habe den gleichen Rat befolgt, ohne die Tabellen zu erstellen, die hier erwähnt werden: stackoverflow.com/a/678310/135101
Tyler Collier
Vielleicht wurde es bereits aus dem einen oder anderen Grund erstellt, @ TylerCollier
Alexandre Marcondes
3
Es ist zu beachten, dass die CREATE TABLEBefehle (falls die Tabellen noch nicht vorhanden sind) in der mysqlDatenbank ausgeführt werden sollten, nicht in von Benutzern erstellten Datenbanken. Möglicherweise könnten die SQL-Anweisungen aktualisiert werden, um dies widerzuspiegeln.
Robert Rossmann
2
Zum Anzeigen ist das Protokoll SELECT * FROM mysql.general_log order by (event_time) descbesser geeignet. nur sagen. :-)
vinrav
Stimmen Sie dem Hinweis nicht zu - mit Server Version 5.6.37 funktioniert es vollständig korrekt. Vielen Dank.
Dmitriy Olhovsky
215
Abgesehen von dem, was mir hier begegnet ist, war das Ausführen der folgenden Schritte die einfachste Möglichkeit, Abfragen ohne Neustart in eine Protokolldatei zu kopieren
SET global log_output ='FILE';SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';SET global general_log =1;
Ich liebe das absolut, arbeite für bestehende und neue Verbindungen auf der DB
Carlton
1
Es gab einige Statistikeinträge - nicht sicher, was das sind, aber ansonsten funktioniert es wirklich gut.
Snowcrash
Damit dies funktioniert, muss Ihr Benutzer über das SUPER-Privileg verfügen, das ein globales DB-Privileg ist und daher nicht auf bestimmte Schemas oder Tabellen beschränkt werden kann:GRANT SUPER ON *.* TO user1@localhost
RobM
Ich würde das mehr als einmal positiv bewerten, wenn ich könnte, ich habe ein Lesezeichen, das hier zeigt :) Vielen Dank!
Resi
124
Die Top-Antwort funktioniert in MySQL 5.6+ nicht. Verwenden Sie stattdessen Folgendes:
Wenn Sie es verwendet haben, können Sie mir die Auswirkungen der oben genannten Leistung auf die Leistung mitteilen. Wäre es sinnvoll, die Protokollierung auf diese Weise zu aktivieren?
Ramesh Pareek
1
Die Auswirkungen auf die Ramesh-Leistung scheinen bei etwa 5 bis 15% zu liegen. Weitere Infos hier percona.com/blog/2009/02/10/…
Firze
1
Ich verstehe nicht, warum Mysql 5.6 das Festlegen von Protokolldateien aus Abfragen nicht zulässt. Wie protokolliere ich alle Abfragen in MySQL 5.6 und höher, wenn Sie nicht auf den Serververzeichnisbaum zugreifen können, sondern nur phpMyAdmin?
Vicky Dev
Starten Sie den MySQL-Dienst nach diesen Änderungen über das xampp-Kontrollfeld neu.
Paramjeet
Dies funktionierte für mich in meiner lokalen Xampp Apache-Umgebung, aber ich musste die Anmeldung immer noch über phpMyAdmin aktivieren. Es konnte die Datei auch nicht im Ordner / usr / log finden und auch nicht erstellen, aber es funktionierte general_log_file=filename.log
einwandfrei
36
Aktivieren Sie das Protokoll für die Tabelle
mysql>SET GLOBAL general_log ='ON';
mysql>SET global log_output ='table';
Zeigen Sie das Protokoll an, indem Sie eine Abfrage auswählen
Gibt es einen Platzhalter zum Protokollieren aller Tabellen? (Es gibt ziemlich viele: C)
RicardoE
Vielen Dank, diese Einstellung war sehr nützlich für mich, da ich den MySQL-Server nicht herunterfahren konnte. Ich möchte auch, dass das Protokoll in der Protokolltabelle erscheint
Gunnar Sigfusson
14
Schnelle Möglichkeit, das allgemeine MySQL-Abfrageprotokoll ohne Neustart zu aktivieren.
mysql>SET GLOBAL general_log ='ON';
mysql>SET GLOBAL general_log_file ='/var/www/nanhe/log/all.log';
Ich habe MySQL über Homebrew, MySQL-Version: MySQL Ver 14.14 Distrib 5.7.15, für OSX10.11 (x86_64) mit dem EditLine-Wrapper installiert
5.2.1. Auswählen von Ausgabezielen für allgemeine Abfragen und langsame Abfrageprotokolle
Ab MySQL 5.1.6 bietet MySQL Server eine flexible Steuerung des Ausgabeziels für das allgemeine Abfrageprotokoll und das langsame Abfrageprotokoll, sofern diese Protokolle aktiviert sind. Mögliche Ziele für Protokolleinträge sind Protokolldateien oder die Tabellen general_log und slow_log in der MySQL-Datenbank
$ uname -a
Darwin Raphaels-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Thu Jun 2120:07:40 PDT 2018; root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64
$ mysql --version/usr/local/mysql/bin/mysql Ver 14.14 Distrib 5.6.23,for osx10.8(x86_64)using EditLine wrapper
Hinzufügen der Protokollierung (Beispiel: Ich denke nicht, dass dies /var/log/...der beste Pfad unter Mac OS ist, aber das hat funktioniert:
sudo vi ./usr/local/mysql-5.6.23-osx10.8-x86_64/my.cnf
[mysqld]
general_log =on
general_log_file=/var/log/mysql/mysqld_general.log
MySQL neu gestartet
Ergebnis:
$ sudo tail -f /var/log/mysql/mysqld_general.log
1812109:41:0421Connect root@localhost on employees
21 Query /* mysql-connector-java-5.1.47 ( Revision: fe1903b1ecb4a96a917f7ed3190d80c049b1de29 ) */SELECT@@session.auto_increment_increment AS auto_increment_increment,@@character_set_client AS character_set_client,@@character_set_connection AS character_set_connection,@@character_set_results AS character_set_results,@@character_set_server AS character_set_server,@@collation_server AS collation_server,@@collation_connection AS collation_connection,@@init_connect AS init_connect,@@interactive_timeout AS interactive_timeout,@@license AS license,@@lower_case_table_names AS lower_case_table_names,@@max_allowed_packet AS max_allowed_packet,@@net_buffer_length AS net_buffer_length,@@net_write_timeout AS net_write_timeout,@@query_cache_size AS query_cache_size,@@query_cache_type AS query_cache_type,@@sql_mode AS sql_mode,@@system_time_zone AS system_time_zone,@@time_zone AS time_zone,@@tx_isolation AS transaction_isolation,@@wait_timeout AS wait_timeout
21 Query SET NAMES latin1
21 Query SET character_set_results =NULL21 Query SET autocommit=121 Query SELECTUSER()21 Query SELECTUSER()1812109:41:1021 Query show tables
1812109:41:2521 Query select count(*)from current_dept_emp
Antworten:
Starten Sie MySQL mit der Option --log:
oder fügen Sie Folgendes in Ihre
my.cnf
Datei ein:In beiden Fällen werden alle Abfragen unter log_file_name protokolliert.
Sie können auch nur langsame Abfragen mit der
--log-slow-queries
Option anstelle von protokollieren--log
. Standardmäßig werden Abfragen, die 10 Sekunden oder länger dauern, als langsam angesehen. Sie können dies ändern, indem Sielong_query_time
die Anzahl der Sekunden festlegen, die eine Abfrage benötigt, um ausgeführt zu werden, bevor sie protokolliert wird.quelle
( Hinweis : Für MySQL-5.6 + funktioniert dies nicht. Es gibt eine Lösung, die für MySQL-5.6 + gilt, wenn Sie nach unten scrollen oder hier klicken .)
Wenn Sie den MySQL-Server nicht neu starten möchten oder können, können Sie auf Ihrem laufenden Server folgendermaßen vorgehen:
mysql
Datenbankquelle
CREATE TABLE
Befehle (falls die Tabellen noch nicht vorhanden sind) in dermysql
Datenbank ausgeführt werden sollten, nicht in von Benutzern erstellten Datenbanken. Möglicherweise könnten die SQL-Anweisungen aktualisiert werden, um dies widerzuspiegeln.SELECT * FROM mysql.general_log order by (event_time) desc
besser geeignet. nur sagen. :-)Abgesehen von dem, was mir hier begegnet ist, war das Ausführen der folgenden Schritte die einfachste Möglichkeit, Abfragen ohne Neustart in eine Protokolldatei zu kopieren
kann mit ausgeschaltet werden
quelle
GRANT SUPER ON *.* TO user1@localhost
Die Top-Antwort funktioniert in MySQL 5.6+ nicht. Verwenden Sie stattdessen Folgendes:
in Ihrer my.cnf / my.ini-Datei
Ubuntu / Debian : /etc/mysql/my.cnf
Windows - : c: \ Programme \ MySQL \ MySQL Server 5.x
wamp : c: \ wamp \ bin \ mysql \ mysqlx.yz \ my.ini
xampp : c: \ xampp \ mysql \ bin \ my.ini.
quelle
phpMyAdmin
?general_log_file=filename.log
Aktivieren Sie das Protokoll für die Tabelle
Zeigen Sie das Protokoll an, indem Sie eine Abfrage auswählen
quelle
Schnelle Möglichkeit, das allgemeine MySQL-Abfrageprotokoll ohne Neustart zu aktivieren.
Ich habe MySQL über Homebrew, MySQL-Version: MySQL Ver 14.14 Distrib 5.7.15, für OSX10.11 (x86_64) mit dem EditLine-Wrapper installiert
quelle
Für den Datensatz wurden general_log und slow_log in 5.1.6 eingeführt:
http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
quelle
Sie sollten sich bewusst sein, dass sich die Anmeldung bei MySQL wirklich auf die Leistung auswirkt, aber es kann sinnvoll sein, dies zu tun.
Normalerweise lasse ich es auf dem Dev-Server (außer wenn es uns verrückt macht :))
quelle
OS / MySQL-Version:
Hinzufügen der Protokollierung (Beispiel: Ich denke nicht, dass dies
/var/log/...
der beste Pfad unter Mac OS ist, aber das hat funktioniert:MySQL neu gestartet
Ergebnis:
quelle
Wenn Sie AWS RDS MYSQL verwenden, finden Sie hier eine schrittweise Anleitung.
Wenn diese Option als "Datei" -Ausgabe festgelegt ist, können Sie das Protokoll direkt in der AWS RDS-Protokollkonsole anzeigen.
AWS RDS MYSQL-Protokollierung
quelle