544 Stimmen

Wie kann man die zuletzt ausgeführten Abfragen an MySQL anzeigen?

Gibt es eine Abfrage/Möglichkeit, die letzten Abfragen anzuzeigen, die auf ALLE Server?

5voto

cherouvim Punkte 31201

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

4voto

Avinash Singh Punkte 968

Si mysql binlog aktiviert ist, können Sie die vom Benutzer ausgeführten Befehle überprüfen, indem Sie Folgendes ausführen folgenden Befehl in der Linux-Konsole ausführt, indem er das Verzeichnis mysql binlog aufruft

mysqlbinlog binlog.000001 >  /tmp/statements.sql

ermöglichen.

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

oder das allgemeine Protokoll wird sich auf die Leistung von mysql auswirken

4voto

Bitclaw Punkte 805

Wenn Sie keine Lust haben, Ihre MySQL-Konfiguration zu ändern, können Sie einen SQL-Profiler wie "Neor Profile SQL" verwenden. http://www.profilesql.com .

3voto

Dev Aggarwal Punkte 703

Nachdem ich Pauls Antwort gelesen hatte, suchte ich nach weiteren Informationen über 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 Kontextes.

(Hinweis: Der folgende Code stammt nicht von mir)

Dieses Skript ist ein Beispiel für eine saubere Tabelle, die Ihnen helfen wird, die Größe Ihrer Tabelle zu reduzieren. Nach einem Tag gibt es etwa 180k Abfragen im Protokoll. (In einer Datei wären das 30 MB pro Tag)

Sie müssen eine zusätzliche Spalte hinzufügen (event_unix) 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 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';

Der Dank geht an Sebastian Kaiser (Originalautor des Codes).

Ich hoffe, dass es für jemanden genauso nützlich ist wie für mich.

1voto

Avinash Singh Punkte 968

Unter Linux können Sie sich folgendes ansehen

cd /root

ls -al

vi .mysql_history Es kann helfen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X