Kann ich die Überwachungsprotokollierung in meiner MySQL-Datenbank aktivieren?
Grundsätzlich möchte ich alle Abfragen eine Stunde lang überwachen und das Protokoll in eine Datei kopieren.
Kann ich die Überwachungsprotokollierung in meiner MySQL-Datenbank aktivieren?
Grundsätzlich möchte ich alle Abfragen eine Stunde lang überwachen und das Protokoll in eine Datei kopieren.
Antworten:
Starten Sie MySQL mit der Option --log:
mysqld --log=log_file_name
oder fügen Sie Folgendes in Ihre my.cnf
Datei ein:
log = log_file_name
In beiden Fällen werden alle Abfragen unter log_file_name protokolliert.
Sie können auch nur langsame Abfragen mit der --log-slow-queries
Option anstelle von protokollieren --log
. Standardmäßig werden Abfragen, die 10 Sekunden oder länger dauern, als langsam angesehen. Sie können dies ändern, indem Sie long_query_time
die Anzahl der Sekunden festlegen, die eine Abfrage benötigt, um ausgeführt zu werden, bevor sie protokolliert wird.
( Hinweis : Für MySQL-5.6 + funktioniert dies nicht. Es gibt eine Lösung, die für MySQL-5.6 + gilt, wenn Sie nach unten scrollen oder hier klicken .)
Wenn Sie den MySQL-Server nicht neu starten möchten oder können, können Sie auf Ihrem laufenden Server folgendermaßen vorgehen:
mysql
Datenbank 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;
CREATE TABLE
Befehle (falls die Tabellen noch nicht vorhanden sind) in der mysql
Datenbank ausgeführt werden sollten, nicht in von Benutzern erstellten Datenbanken. Möglicherweise könnten die SQL-Anweisungen aktualisiert werden, um dies widerzuspiegeln.
SELECT * FROM mysql.general_log order by (event_time) desc
besser geeignet. nur sagen. :-)
Abgesehen von dem, was mir hier begegnet ist, war das Ausführen der folgenden Schritte die einfachste Möglichkeit, Abfragen ohne Neustart in eine Protokolldatei zu kopieren
SET global log_output = 'FILE';
SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';
SET global general_log = 1;
kann mit ausgeschaltet werden
SET global general_log = 0;
GRANT SUPER ON *.* TO user1@localhost
Die Top-Antwort funktioniert in MySQL 5.6+ nicht. Verwenden Sie stattdessen Folgendes:
[mysqld]
general_log = on
general_log_file=/usr/log/general.log
in Ihrer my.cnf / my.ini-Datei
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.
phpMyAdmin
?
general_log_file=filename.log
Aktivieren Sie das Protokoll für die Tabelle
mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';
Zeigen Sie das Protokoll an, indem Sie eine Abfrage auswählen
select * from mysql.general_log
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 habe MySQL über Homebrew, MySQL-Version: MySQL Ver 14.14 Distrib 5.7.15, für OSX10.11 (x86_64) mit dem EditLine-Wrapper installiert
Für den Datensatz wurden general_log und slow_log in 5.1.6 eingeführt:
http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
5.2.1. Auswählen von Ausgabezielen für allgemeine Abfragen und langsame Abfrageprotokolle
Ab MySQL 5.1.6 bietet MySQL Server eine flexible Steuerung des Ausgabeziels für das allgemeine Abfrageprotokoll und das langsame Abfrageprotokoll, sofern diese Protokolle aktiviert sind. Mögliche Ziele für Protokolleinträge sind Protokolldateien oder die Tabellen general_log und slow_log in der MySQL-Datenbank
Sie sollten sich bewusst sein, dass sich die Anmeldung bei MySQL wirklich auf die Leistung auswirkt, aber es kann sinnvoll sein, dies zu tun.
Normalerweise lasse ich es auf dem Dev-Server (außer wenn es uns verrückt macht :))
OS / MySQL-Version:
$ uname -a
Darwin Raphaels-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Thu Jun 21 20:07:40 PDT 2018; root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64
$ mysql --version
/usr/local/mysql/bin/mysql Ver 14.14 Distrib 5.6.23, for osx10.8 (x86_64) using EditLine wrapper
Hinzufügen der Protokollierung (Beispiel: Ich denke nicht, dass dies /var/log/...
der beste Pfad unter Mac OS ist, aber das hat funktioniert:
sudo vi ./usr/local/mysql-5.6.23-osx10.8-x86_64/my.cnf
[mysqld]
general_log = on
general_log_file=/var/log/mysql/mysqld_general.log
MySQL neu gestartet
Ergebnis:
$ sudo tail -f /var/log/mysql/mysqld_general.log
181210 9:41:04 21 Connect root@localhost on employees
21 Query /* mysql-connector-java-5.1.47 ( Revision: fe1903b1ecb4a96a917f7ed3190d80c049b1de29 ) */SELECT @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@collation_server AS collation_server, @@collation_connection AS collation_connection, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS transaction_isolation, @@wait_timeout AS wait_timeout
21 Query SET NAMES latin1
21 Query SET character_set_results = NULL
21 Query SET autocommit=1
21 Query SELECT USER()
21 Query SELECT USER()
181210 9:41:10 21 Query show tables
181210 9:41:25 21 Query select count(*) from current_dept_emp
Wenn Sie AWS RDS MYSQL verwenden, finden Sie hier eine schrittweise Anleitung.
Wenn diese Option als "Datei" -Ausgabe festgelegt ist, können Sie das Protokoll direkt in der AWS RDS-Protokollkonsole anzeigen.