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:
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:
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; |