mysql – log queries


Man kann entweder ein Logfile für alle Queries setzen (mysqld --log=log_file_name bzw. log = log_file_name in der my.cnf) oder die Abfragen in die Tabelle mysql.general_log protokollieren lassen.
Die Verwendung der Tabelle kann zum einen ohne Neustart des mysqld erfolgen, zum anderen lassen sich die dort gespeicherten Werte wesentlich leichter filtern.

Die Tabelle lässt sich (falls nicht schon vorhanden) wie folgt anlegen:
CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log';

Zum Aktivieren des Query-Logs reicht dann

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

Angezeigt wird das Log bspw. mit

select * from mysql.general_log

Um das Logging wieder zu deaktivieren reicht ein

SET global general_log = 0;

Gelöscht wird das Log mit

TRUNCATE TABLE 'mysql.general_log;

Das funktioniert so auch für slow-querys. Die entsprechende Tabelle mysql.slow_log kann so angelegt werden:
CREATE TABLE `slow_log` (
`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`query_time` time NOT NULL,
`lock_time` time NOT NULL,
`rows_sent` int(11) NOT NULL,
`rows_examined` int(11) NOT NULL,
`db` varchar(512) NOT NULL,
`last_insert_id` int(11) NOT NULL,
`insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`sql_text` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log';

Possibly related posts: (automatically generated)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *