Gibt es eine Abfrage / Möglichkeit, die zuletzt auf ALLEN Servern ausgeführten Abfragen anzuzeigen ?
471
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
Starten Sie mysql neu, um diese Änderung zu übernehmen. Jetzt können Sie
Hey Presto, du kannst dir die Anfragen ansehen, wenn sie eingehen.
quelle
Sie können das Fließende für die Überwachung von MySQL-Abfrageprotokollen tun.
Öffnen Sie die MySQL-Konfigurationsdatei my.cnf
Suchen Sie die folgenden Zeilen unter einer
[mysqld]
Überschrift und kommentieren Sie diese Zeilen aus, um das Protokoll zu aktivierenStarten Sie Ihren MySQL-Server neu, um Änderungen zu berücksichtigen
Überwachen Sie das MySQL-Serverprotokoll mit dem folgenden Befehl im Terminal
quelle
quelle
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
Wenn wir einen Abfrageverlauf in der Tabelle benötigen, dann
Schauen Sie sich die Tabelle mysql.general_log an
Wenn Sie lieber in eine Datei ausgeben möchten:
2) Wir können auch die Abfragen in der .mysql_history-Datei cat ~ / .mysql_history überprüfen
quelle
Vielleicht können Sie das herausfinden, indem Sie sich das Abfrageprotokoll ansehen .
quelle
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
aktivieren
oder ein allgemeines Protokoll wirkt sich auf die Leistung von MySQL aus
quelle
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 .
quelle
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:
Bereinigungsskript:
Der Kredit geht an Sebastian Kaiser (Originalautor des Codes).
Hoffe, jemand wird es nützlich finden, wie ich es getan habe.
quelle
Sie können sich unter Linux Folgendes ansehen
vi .mysql_history
Es kann helfenquelle