webentwicklung-frage-antwort-db.com.de

Alle Abfragen in mysql protokollieren

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.

247
public static

Starten Sie mysql mit der Option --log:

mysqld --log=log_file_name

oder legen Sie folgendes in Ihre my.cnf-Datei:

log = log_file_name

In beiden Fällen werden alle Abfragen in Protokolldateiname protokolliert.

Sie können auch nur langsame Abfragen mit der Option --log-slow-queries anstelle von --log protokollieren. Abfragen, die 10 Sekunden oder länger dauern, werden als langsam betrachtet. Sie können dies ändern, indem Sie long_query_time auf die Anzahl von Sekunden setzen, die eine Abfrage ausführen muss, bevor sie protokolliert wird.

157
Robert Gamble

(Note: Für mysql-5.6 + funktioniert dies nicht. Es gibt eine Lösung, die für mysql-5.6 + gilt, wenn Sie nach unten 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:

  • Erstellen Sie Ihre Protokolltabellen in der 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'
  • Aktivieren Sie die Abfrageprotokollierung für die Datenbank
SET global general_log = 1;
SET global log_output = 'table';
  • Protokoll anzeigen
select * from mysql.general_log
  • Deaktivieren Sie die Abfrageprotokollierung für die Datenbank
SET global general_log = 0;
211

Abgesehen von dem, was mir hier aufgefallen ist, war das Ausführen der folgenden Vorgehensweise die einfachste Methode, Abfragen in eine Protokolldatei auszugeben, ohne neu gestartet zu werden

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;
177
Ram

Top Antwort funktioniert nicht in MySQL 5.6+. Verwenden Sie stattdessen diese:

[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:\ProgramData\MySQL\MySQL Server 5.x
wamp : c:\wamp\bin\mysql\mysqlx.y.z\my.ini
xampp : c:\xampp\mysql\bin\my.ini.

108
ademin

Aktivieren Sie das Protokoll für die Tabelle

mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';

Protokoll nach Auswahlabfrage anzeigen

select * from mysql.general_log
26
Vipin Yadav

Schnelle Möglichkeit zum Aktivieren des MySQL General Query Log ohne Neustart.

mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL general_log_file = '/var/www/nanhe/log/all.log';

Ich habe mysql über homebrew installiert, mysql version: mysql Ver 14.14 Distrib 5.7.15, für osx10.11 (x86_64) mit EditLine-Wrapper

11
Nanhe Kumar

Für den Datensatz wurden general_log und slow_log in 5.1.6 eingeführt:

http://dev.mysql.com/doc/refman/5.1/de/log-destinations.html

5.2.1. Auswählen von allgemeinen Abfrage- und langsamen Abfragezielen

Ab MySQL 5.1.6 bietet MySQL Server eine flexible Steuerung von Ziel der Ausgabe im allgemeinen Abfrageprotokoll und im langsamen Abfrageprotokoll Wenn diese Protokolle aktiviert sind. Mögliche Ziele für Protokolleinträge sind Protokolldateien oder die Tabellen general_log und slow_log in mysql Datenbank

6
Marcello Romani

Sie sollten sich bewusst sein, dass sich die Anmeldung bei mysql wirklich auf die Leistung auswirkt, es kann jedoch sinnvoll sein.

Ich lasse es normalerweise auf dem Dev-Server (außer wenn es uns verrückt macht :))

5
Lea de Groot

Wenn Sie AWS RDS MYSQL verwenden, führen Sie hier eine schrittweise Anleitung durch.

Wenn die Ausgabe als Datei festgelegt ist, können Sie das Protokoll direkt in der AWS RDS-Protokollkonsole anzeigen.

AWS RDS MYSQL-Protokollierung

1

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 (Ich glaube nicht, dass /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   [email protected] 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
0
Raphvanns