it-swarm.com.de

Wie zeige ich die letzten auf MySQL ausgeführten Abfragen an?

Gibt es eine Abfrage/Möglichkeit, um die letzten auf ALL Servern ausgeführten Abfragen anzuzeigen?

443
FerranB

Für diejenigen, die mit MySQL> = 5.1.12 gesegnet sind, können Sie diese Option zur Laufzeit global steuern:

  1. Führe SET GLOBAL log_output = 'TABLE'; aus
  2. Führe SET GLOBAL general_log = 'ON'; aus
  3. Schauen Sie sich den Tisch an mysql.general_log

Wenn Sie lieber in eine Datei als in eine Tabelle ausgeben möchten:

  1. SET GLOBAL log_output = "FILE"; die Standardeinstellung .
  2. SET GLOBAL general_log_file = "/path/to/your/logfile.log";
  3. SET GLOBAL general_log = 'ON';

Ich bevorzuge diese Methode zum Bearbeiten von .cnf-Dateien, weil:

  1. sie bearbeiten die Datei my.cnf nicht und aktivieren möglicherweise die Protokollierung dauerhaft
  2. sie fischen nicht im Dateisystem herum und suchen nach dem Abfrageprotokoll - oder, noch schlimmer, abgelenkt von der Notwendigkeit, das perfekte Ziel zu finden. /var/log /var/data/log/opt /home/mysql_savior/var
  3. Sie müssen den Server nicht neu starten und keine aktuellen Verbindungen zu ihm unterbrechen.
  4. durch einen Neustart des Servers bleiben Sie an der Stelle, an der Sie gestartet haben (das Protokoll ist standardmäßig noch deaktiviert).

Weitere Informationen finden Sie unter MySQL 5.1 Referenzhandbuch - Serversystemvariablen - general_log

740
FlipMcF

Sie können ein allgemeines Abfrageprotokoll für diese Art der Diagnose aktivieren. Im Allgemeinen werden jedoch nicht alle SELECT-Abfragen auf einem Produktionsserver protokolliert. Dies ist ein Leistungskiller.

Bearbeiten Sie Ihre MySQL-Konfiguration, z. /etc/mysql/my.cnf - suche oder füge eine Zeile wie diese hinzu

[mysqld]
log = /var/log/mysql/mysql.log

Starten Sie mysql neu, um diese Änderung zu übernehmen

tail -f /var/log/mysql/mysql.log

Hallo Presto, Sie können die Anfragen verfolgen, wenn sie eingehen.

42
Paul Dixon

Sie können die fließende Sache für die Überwachung von MySQL-Abfrageprotokollen tun.

Öffnen Sie die mysql-Konfigurationsdatei my.cnf

Sudo nano /etc/mysql/my.cnf

Durchsuchen Sie die folgenden Zeilen unter der Überschrift [mysqld] 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 die Änderungen zu übernehmen

Sudo service mysql start

Überwachen Sie das MySQL-Server-Protokoll mit dem folgenden Befehl im Terminal

tail -f /var/log/mysql/mysql.log
16
Rokibul Hasan
SELECT * FROM  mysql.general_log  WHERE command_type ='Query' LIMIT total;
14
zloctb

1) Wenn die allgemeine Mysql-Protokollierung aktiviert ist, können wir die Abfragen in der Protokolldatei oder Tabelle basierend auf den Angaben in der Konfiguration überprüfen. Überprüfen Sie, was mit dem folgenden Befehl aktiviert ist

mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';

Wenn wir den 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 es vorziehen, in eine Datei auszugeben:

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

9
minhas23

Vielleicht können Sie das herausfinden, indem Sie sich das Abfrageprotokoll ansehen.

4
cherouvim

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 Verzeichnis mysql binlog navigieren

mysqlbinlog binlog.000001 >  /tmp/statements.sql

aktivieren

[mysqld]
log = /var/log/mysql/mysql.log

oder allgemeines Protokoll wirkt sich auf die Leistung von MySQL aus

4
Avinash Singh

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.

2
Bitclaw

Nachdem ich Pauls Antwort gelesen hatte, grub ich weiter nach weiteren Informationen zu https://dev.mysql.com/doc/refman/5.7/en/query-log.html

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 und die Tabellengröße zu reduzieren. Wie nach einem Tag wird es etwa 180.000 Abfragen des Protokolls 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 event_time in Timestamp von event_unix ... klingt ein bisschen verwirrend, aber es funktioniert 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';

Dank geht an Sebastian Kaiser (Originalautor des Codes).

Hoffe, jemand wird es nützlich finden, wie ich es tat.

2
Dev Aggarwal

Sie können das folgende in Linux betrachten

cd /root

ls -al

vi .mysql_history Es kann helfen

1
Avinash Singh