it-swarm.com.de

So aktivieren Sie das MySQL Query Log

Wie aktiviere ich die MySQL-Funktion, die jede SQL-Abfrageanweisung, die von Clients empfangen wurde, und den Zeitpunkt, zu dem die Abfrageanweisung übermittelt wurde, protokolliert? Kann ich das in phpmyadmin oder NaviCat tun? Wie analysiert man das Protokoll?

223
Feng-Chun Ting

Erstens, Denken Sie daran, dass diese Protokolldatei auf einem ausgelasteten Server sehr groß werden kann.

Für mysql <5.1.29:

Um das Abfrageprotokoll zu aktivieren, geben Sie dies in /etc/my.cnf im Abschnitt [mysqld] ein

log   = /path/to/query.log  #works for mysql < 5.1.29

Um es auch von der MySQL-Konsole aus zu aktivieren

SET general_log = 1;

Siehe http://dev.mysql.com/doc/refman/5.1/de/query-log.html

Für MySQL 5.1.29+

Mit mysql 5.1.29+ ist die Option log veraltet. Um die Protokolldatei anzugeben und die Protokollierung zu aktivieren, verwenden Sie diese in my.cnf im Abschnitt [mysqld]:

general_log_file = /path/to/query.log
general_log      = 1

Um die Protokollierung von der MySQL-Konsole aus zu aktivieren, müssen Sie alternativ auch den Speicherort der Protokolldatei angeben oder den Standardspeicherort suchen.

SET global general_log = 1;

Beachten Sie außerdem, dass es zusätzliche Optionen gibt, um nur langsame Abfragen zu protokollieren oder solche, die keine Indizes verwenden. 

266
Gryphius

Schauen Sie sich diese Antwort auf eine andere verwandte Frage an. Es zeigt, wie Sie Protokolle auf Live-Servern aktivieren, deaktivieren und anzeigen können, ohne neu gestartet zu werden.

Alle Abfragen in mysql protokollieren


Hier ist eine Zusammenfassung:

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 Log-Tabellen (siehe Antwort )

  • Aktivieren Sie die Abfrageprotokollierung für die Datenbank (Beachten Sie, dass die Zeichenfolge 'table' wörtlich gesetzt und nicht durch einen Tabellennamen ersetzt werden sollte. Danke Nicholas Pickering )

SET global general_log = 1;
SET global log_output = 'table';
  • Protokoll anzeigen
select * from mysql.general_log;
  • Deaktivieren Sie die Abfrageprotokollierung für die Datenbank
SET global general_log = 0;
157

Ich verwende diese Methode zur Protokollierung, wenn ich verschiedene Seitenladevorgänge schnell optimieren möchte. Es ist ein kleiner Tipp ...

Protokollierung an einer TABELLE  

SET global general_log = 1;
SET global log_output = 'table';

Sie können dann aus meiner mysql.general_log-Tabelle auswählen, um die letzten Abfragen abzurufen. 

Ich kann dann etwas Ähnliches wie tail -f auf der mysql.log tun, aber mit mehr Verfeinerungen ...

select * from mysql.general_log 
where  event_time  > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> "" 
and argument <> "SET NAMES 'UTF8'"  and argument <> "SHOW STATUS"  
and command_type = "Query"  and argument <> "SET PROFILING=1"

So können Sie leicht meine Abfragen sehen, die ich versuchen und reduzieren kann. Ich verwende das Intervall von 8 Sekunden, um nur Abfragen abzurufen, die innerhalb der letzten 8 Sekunden ausgeführt wurden.

51
Layke

Dies war bereits in einem Kommentar, verdient aber eine eigene Antwort: Ohne die Konfigurationsdateien zu bearbeiten: in mysql, als root, tun

SET global general_log_file='/tmp/mysql.log'; 
SET global log_output = 'file';
SET global general_log = on;

Vergiss nicht, es danach auszuschalten.

42
commonpike

Sie können das allgemeine Abfrageprotokoll (das alle Abfragen protokolliert) mit deaktivieren oder aktivieren

SET GLOBAL general_log = 1 # (or 0 to disable)
13
Jon

Ich wollte auch, dass die MySQL-Protokolldatei die Abfragen anzeigt, und ich habe dies mit den folgenden Anweisungen gelöst

  1. Gehe zu /etc/mysql/mysql.conf.d
  2. Öffnen Sie die mysqld.cnf

und aktivieren Sie die folgenden Zeilen

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
  1. starten Sie MySQL mit diesem Befehl neu. /etc/init.d/mysql restart
  2. gehen Sie zu /var/log/mysql/ und überprüfen Sie die Protokolle
6
shrikant

In MySQL 5.6 Version ..__ ist ein Fehler aufgetreten. Sogar mysqld zeigt Folgendes:

    Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf 

Die Einstellungen werden in der folgenden Reihenfolge gelesen:

    Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf

Überprüfen Sie die Datei: "C:\ProgramData\MySQL\MySQL Server 5.6\my.ini"

Ich hoffe es hilft jemandem.

3
croonx

Unter Windows können Sie einfach zu gehen 

C:\wamp\bin\mysql\mysql5.1.53\my.ini

Fügen Sie diese Zeile in my.ini ein.

general_log_file = c:/wamp/logs/mysql_query_log.log

Die Datei my.ini sieht schließlich so aus

...
...
...    
socket      = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log        #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...
2
HimalayanCoder

Nicht gerade eine Antwort auf die Frage, denn die Frage hat bereits großartige Antworten. Dies ist eine Seiteninfo. Die Aktivierung von general_log hat die MySQL-Leistung wirklich beeinträchtigt. Ich habe general_log =1 versehentlich auf einem Produktionsserver gelassen und verbrachte Stunden damit, herauszufinden, warum die Leistung nicht mit einer ähnlichen Konfiguration auf anderen Servern vergleichbar war. Dann fand ich das, was die Auswirkung der Aktivierung des allgemeinen Protokolls erklärt. http://www.fromdual.com/general_query_log_vs_mysql_performance .

Fassen Sie die Geschichte an, fügen Sie nicht general_log=1 in die .cnf-Datei ein. Verwenden Sie stattdessen set global general_log =1 für eine kurze Zeitspanne, nur um sich einzuloggen, um herauszufinden, was Sie herausfinden möchten, und deaktivieren Sie es. 

1
Allen King

So aktivieren Sie das Abfrageprotokoll in der MAC-Maschine:

Öffnen Sie die folgende Datei:

vi /private/etc/my.cnf

Legen Sie die Abfrageprotokoll-URL im Abschnitt "mysqld" wie folgt fest:

[mysqld]

general_log_file=/Users/kumanan/Documents/mysql_query.log

Nur wenige Maschinen protokollieren die Abfrage nicht ordnungsgemäß. Sie können sie also über die MySQL-Konsole aktivieren

mysql> SET global general_log = 1;
1
Kumanan

für mysql> = 5.5 nur für langsame Abfragen (1 Sekunde und mehr) my.cfg

[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes
1
lptn

Ich musste das allgemeine Protokoll an einem Punkt ablegen und neu erstellen. Während der Neuerstellung wurden Zeichensätze durcheinander gebracht, und ich hatte schließlich einen Fehler in den Protokollen:

[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_Host' at position 1 to have character set 'utf8' but found character set 'latin1'

Wenn die Standardantwort "Prüfen, ob die Protokollierung aktiviert ist" für Sie nicht funktioniert, überprüfen Sie, ob Ihre Felder den richtigen Zeichensatz haben.

0
William Neely

In phpMyAdmin 4.0 wechseln Sie zu Status> Monitor. Dort können Sie das langsame Abfrageprotokoll und das allgemeine Protokoll aktivieren, einen Live-Monitor anzeigen, einen Teil des Diagramms auswählen, die zugehörigen Abfragen sehen und diese analysieren.

0
Marc Delisle
// To see global variable is enabled or not and location of query log    
SHOW VARIABLES like 'general%';
// Set query log on 
SET GLOBAL general_log = ON; 
0