Antworten:
Für diejenigen, die mit MySQL> = 5.1.12 gesegnet sind, können Sie diese Option zur Laufzeit global steuern:
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
mysql.general_log
Wenn Sie lieber in eine Datei als in eine Tabelle ausgeben möchten:
SET GLOBAL log_output = "FILE";
die Standardeinstellung .SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
Ich bevorzuge diese Methode gegenüber der Bearbeitung von .cnf-Dateien, weil:
my.cnf
Datei nicht und aktivieren möglicherweise die Protokollierung dauerhaft/var/log /var/data/log
/opt /home/mysql_savior/var
Weitere Informationen finden Sie im MySQL 5.1-Referenzhandbuch - Serversystemvariablen - general_log
Sie können ein allgemeines Abfrageprotokoll für diese Art von Diagnose aktivieren . Im Allgemeinen protokollieren Sie jedoch nicht alle SELECT-Abfragen auf einem Produktionsserver. Dies ist ein Leistungskiller.
Bearbeiten Sie Ihre MySQL-Konfiguration, z. B. /etc/mysql/my.cnf - suchen Sie nach einer solchen Zeile oder fügen Sie sie hinzu
[mysqld]
log = /var/log/mysql/mysql.log
Starten Sie mysql neu, um diese Änderung zu übernehmen. Jetzt können Sie
tail -f /var/log/mysql/mysql.log
Hey Presto, du kannst dir die Anfragen ansehen, wenn sie eingehen.
Sie können das Fließende für die Überwachung von MySQL-Abfrageprotokollen tun.
Öffnen Sie die MySQL-Konfigurationsdatei my.cnf
sudo nano /etc/mysql/my.cnf
Suchen Sie die folgenden Zeilen unter einer [mysqld]
Überschrift und kommentieren Sie diese Zeilen aus, um das Protokoll zu aktivieren
general_log_file = /var/log/mysql/mysql.log
general_log = 1
Starten Sie Ihren MySQL-Server neu, um Änderungen zu berücksichtigen
sudo service mysql start
Überwachen Sie das MySQL-Serverprotokoll mit dem folgenden Befehl im Terminal
tail -f /var/log/mysql/mysql.log
1) Wenn die allgemeine MySQL-Protokollierung aktiviert ist, können wir die Abfragen in der Protokolldatei oder -tabelle anhand der Angaben in der Konfiguration überprüfen. Überprüfen Sie mit dem folgenden Befehl, was aktiviert ist
mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';
Wenn wir einen Abfrageverlauf in der Tabelle benötigen, dann
Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';
Schauen Sie sich die Tabelle mysql.general_log an
Wenn Sie lieber in eine Datei ausgeben möchten:
SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
2) Wir können auch die Abfragen in der .mysql_history-Datei cat ~ / .mysql_history überprüfen
Vielleicht können Sie das herausfinden, indem Sie sich das Abfrageprotokoll ansehen .
Wenn mysql binlog aktiviert ist, können Sie die vom Benutzer ausgeführten Befehle überprüfen, indem Sie den folgenden Befehl in der Linux-Konsole ausführen, indem Sie zum mysql binlog-Verzeichnis navigieren
mysqlbinlog binlog.000001 > /tmp/statements.sql
aktivieren
[mysqld]
log = /var/log/mysql/mysql.log
oder ein allgemeines Protokoll wirkt sich auf die Leistung von MySQL aus
Wenn Sie keine Lust haben, Ihre MySQL-Konfiguration zu ändern, können Sie einen SQL-Profiler wie "Neor Profile SQL" http://www.profilesql.com verwenden .
Nachdem ich Pauls Antwort gelesen hatte, suchte ich unter https://dev.mysql.com/doc/refman/5.7/en/query-log.html nach weiteren Informationen
Ich habe einen wirklich nützlichen Code von einer Person gefunden. Hier ist die Zusammenfassung des Kontexts.
(Hinweis: Der folgende Code gehört nicht mir.)
Dieses Skript ist ein Beispiel, um die Tabelle sauber zu halten, damit Sie Ihre Tabellengröße reduzieren können. Wie nach einem Tag wird es ungefähr 180.000 Protokollabfragen geben. (In einer Datei wären es 30 MB pro Tag)
Sie müssen eine zusätzliche Spalte (event_unix) hinzufügen, und dann können Sie dieses Skript verwenden, um das Protokoll sauber zu halten. Es aktualisiert den Zeitstempel in einen Unix-Zeitstempel, löscht die Protokolle, die älter als 1 Tag sind, und aktualisiert dann die Ereigniszeit in Timestamp von event_unix ... klingt etwas verwirrend, funktioniert aber großartig.
Befehle für die neue Spalte:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
Bereinigungsskript:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
Der Kredit geht an Sebastian Kaiser (Originalautor des Codes).
Hoffe, jemand wird es nützlich finden, wie ich es getan habe.
Sie können sich unter Linux Folgendes ansehen
cd /root
ls -al
vi .mysql_history
Es kann helfen