Datenbankabfragen Loggen

Bei der Fehlersuche oder auch beim Entwickeln selbst, kann es manchmal hilfreich sein zu erkennen welches SQL Statement auf eine Datenbank abgesetzt wird. Hierfür kann man das General_Log von Mysql nutzen, dort werden ALLE SQL Statements protokolliert.

Man schaltet das General_Log so an:

SHOW VARIABLES Like "general_log%";

Als Ergebnis sieht man folgendes:

mysql console

Dort sieht man dass das General_log ausgeschaltet ist. Mit dem folgenden Befehl schaltet man die Logfunktion an:

SET GLOBAL general_log = 'ON';

Wenn man nun wieder die Globale Variable mit dem gleichen Befehl wie oben abfragt:

SHOW VARIABLES Like "general_log%";

ergibt nun folgendes:

mysql console

ACHTUNG: Das Log ist SEHR ausführlich, man muss darauf achten das General_log wiederabzuschalten, sonst läuft das Log schnell die Platte voll. Es wird jedes kleinste SQL-Statement geloggt…

Zum Abschalten einfach den Befehl absetzen:

SET GLOBAL general_log = 'OFF';

Alternativ zur Ausgabe der Loginformationen in eine Logdatei, kann man auch die Ausgabe umlenken in eine Tabelle. Hierfür setzt man die Globale Variable log_output auf den Wert TABLE:

SET GLOBAL log_output = 'TABLE';

Der MySQL Datenbankserver geht her und erstellt automatisch eine Tablle GENERAL_LOG in der Datenbank MYSQL.

 

In der Tabelle GENERAL_LOG werden die Daten entsprechend in Spalten abgelegt:

 

Diese Form der Logausgabe ist natürlich wesentlich praktischer, da man auf der Tabelle natürlich SELECT-Statments benutzen kann, um bestimmte Log Einträge schnell zu finden.

Man kann einzelne Datensätze in der Tabelle GENERAL_LOG nicht löschen, man muss die ganze Tabelle leeren mit TRUNCATE

truncate table mysql.general_log;
http://www.agile-coding.net/datenbankabfragen-loggen/