Ist es mir möglich, Audit-Logging auf meiner MySQL-Datenbank zu aktivieren?Alle Abfragen in mysql protokollieren
Ich möchte im Grunde alle Abfragen für eine Stunde überwachen und das Protokoll in eine Datei ausgeben.
Ist es mir möglich, Audit-Logging auf meiner MySQL-Datenbank zu aktivieren?Alle Abfragen in mysql protokollieren
Ich möchte im Grunde alle Abfragen für eine Stunde überwachen und das Protokoll in eine Datei ausgeben.
starten mysql mit der Option --log:
mysqld --log=log_file_name
oder legen Sie folgendes in my.cnf
Datei:
log = log_file_name
Entweder werden alle Anfragen melden Sie sich an LOG_FILE_NAME.
Sie können auch nur langsame Abfragen mit der Option --log-slow-queries
anstelle von --log
protokollieren. Standardmäßig werden Abfragen, die 10 Sekunden oder länger dauern, als langsam betrachtet. Sie können dies ändern, indem Sie long_query_time
auf die Anzahl der Sekunden setzen, die eine Abfrage ausführen muss, bevor sie protokolliert wird.
+1 für wusste nicht, dass. Benutzte Auslöser stattdessen. –
Es sollte selbstverständlich sein, aber das in einer Produktionskiste eingeschaltet zu lassen, wird sehr schnell nicht unterhaltsam. * g * – ceejayoz
Wenn Sie Probleme beim Aktivieren der Protokollierung auf diese Weise haben, überprüfen Sie, ob der Benutzer mysql in den entsprechenden Speicherort schreiben kann. –
Sie sollten sich darüber im Klaren sein, dass mysql-Logging sich wirklich auf die Leistung auswirkt, aber es kann sinnvoll sein, dies zu tun.
ich es in der Regel auf dem Dev-Server verlassen auf (es sei denn, es treibt uns verrückt :))
(Hinweis: Für mysql-5.6 + dies nicht funktionieren Es gibt eine Lösung, die mysql gilt. -5.6+ wenn Sie scroll down oder click here)
wenn Sie nicht wollen oder können nicht den MySQL-Server neu starten Sie so auf Ihrem laufenden Server ablaufen kann.
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'
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'
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log
SET global general_log = 0;
Ich bin nicht sicher, ob das für jede Version von MySQL gilt (ich bin auf 5.5), aber ich musste die Tabellen nicht erstellen. Ich folgte dem gleichen Rat abzüglich der Erstellung der Tabellen, die hier erwähnt wird: http://StackOverflow.com/a/678310/135101 –
Vielleicht war es bereits aus dem einen oder anderen Grund erstellt, @TylerCollier –
Es sollte angemerkt werden, dass die ' CREATE TABLE-Befehle sollten (falls die Tabellen noch nicht existieren) in der mysql-Datenbank ausgeführt werden, nicht in irgendwelchen vom Benutzer erstellten Datenbanken. Vielleicht könnten die SQL-Anweisungen aktualisiert werden, um dies zu berücksichtigen. –
Für die Aufzeichnung general_log und slow_log wurden in 5.1.6 eingeführt:
http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
5.2.1. Auswahl der Ausgabeziele für die allgemeine Abfrage und das langsame Abfrageprotokoll
Ab MySQL 5.1.6, bietet MySQL Server flexible Kontrolle über das Ziel der Ausgabe an das allgemeine Abfrageprotokoll und das langsame Abfrageprotokoll, , wenn diese Protokolle aktiviert sind. Mögliche Ziele für Protokolleinträge sind Protokolldateien oder die die general_log und slow_log Tabellen in der mysql Datenbank
Außer dem, was ich über hier kam, laufen die folgenden der einfachste Weg war Abfragen in eine Protokolldatei Dump ohne Neustart
SET global log_output = 'FILE';
SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';
SET global general_log = 1;
mit
SET global general_log = 0;
Top Antwort funktioniert nicht in mysql ausgeschaltet werden 5.6+. Verwenden Sie stattdessen:
[mysqld]
general_log = on
general_log_file=/usr/log/general.log
in Ihrer my.cnf/my.ini
Ubuntu/Debian: /etc/mysql/my.cnf
Windows-: c: \ Programme \ MySQL \ MySQL Server 5.x
wamp: c: \ wamp \ bin \ mysql \ mysqlx.yz \ my.ini
xampp: c: \ xampp \ mysql \ bin \ my.ini.
Wenn Sie es verwendet haben, können Sie mir die Auswirkungen der oben genannten Leistung auf die Leistung mitteilen, und wäre es sinnvoll, die Protokollierung auf diese Weise zu aktivieren? –
Ramesh Performance-Einbußen scheinen um 5-15% zu sinken. Mehr Infos hier https://www.percona.com/blog/2009/02/10/impact-of-logging-on-mysql%E2%80%99s-performance/ – Firze
Ich verstehe nicht, warum Mysql 5.6 doesn ' t Logdatei darf nicht aus Abfragen gesetzt werden? Wie protokolliert man alle Abfragen in MySQL 5.6 und höher, wenn man keinen Zugriff auf den Verzeichnisbaum des Servers hat, sondern nur 'phpMyAdmin'? –
Schnelle Möglichkeit, das allgemeine MySQL-Abfrageprotokoll ohne Neustart zu aktivieren.
mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL general_log_file = '/var/www/nanhe/log/all.log';
ich mysql durch Homebrew installiert haben, MySQL Version: mysql Ver 14.14 Distrib 5.7.15, für osx10.11 (x86_64) mit editline Wrapper
Bei Verwendung von AWS RDS MYSQL, Schritt Schritt Anleitung hier.
Bei der Einstellung 'Datei' können Sie das Protokoll direkt in der AWS RDS "Log" -Konsole anzeigen.
für die Tabelle das Protokoll aktivieren
mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';
View log von Auswahlabfrage
select * from mysql.general_log
Gibt es einen Platzhalter, um alle Tabellen zu protokollieren? (Es gibt eine ganze Menge: C) – RicardoE
Doppelte Frage http://stackoverflow.com/q/650238/684229 – TMS
Für Leser, Vorteil: Verpassen Sie nicht die Frage im obigen Kommentar zu lesen. – claws
Sie können meine bestehende Antwort verweisen hier http://dba.stackexchange.com/a/62477/6037 –