Log toutes les requêtes dans mysql

est-il possible pour moi d'activer la journalisation d'audit sur ma base de données mysql?

je veux essentiellement surveiller toutes les requêtes pendant une heure, et vider le journal dans un fichier.

225
demandé sur public static 2008-11-20 03:39:01

9 réponses

Démarrer mysql avec l'option --log:

mysqld --log=log_file_name

ou placez ce qui suit dans votre fichier my.cnf :

log = log_file_name

L'un ou l'autre logera toutes les requêtes dans log_file_name.

vous pouvez également enregistrer uniquement les requêtes lentes en utilisant l'option --log-slow-queries au lieu de --log . Par défaut, les requêtes qui prennent 10 secondes ou plus sont considérées comme lentes, vous pouvez changer cela en réglant long_query_time sur le nombre de secondes a la requête doit être exécutée avant d'être journalisée.

148
répondu Robert Gamble 2017-06-16 22:44:07

( Note : pour mysql-5.6+ cela ne marchera pas. Il ya une solution qui s'applique à mysql-5.6+ si vous faire défiler vers le bas ou Cliquez ici .)

si vous ne voulez pas ou ne pouvez pas redémarrer le serveur MySQL, vous pouvez procéder comme ceci sur votre serveur courant:

  • Créez vos tables de log sur la mysql base de données
  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'
  • Activer la journalisation des Requêtes sur la base de données
SET global general_log = 1;
SET global log_output = 'table';
  • Afficher le journal
select * from mysql.general_log
  • Désactiver la journalisation des Requêtes sur la base de données
SET global general_log = 0;
199
répondu Alexandre Marcondes 2018-01-23 03:55:23

en plus de ce que j'ai trouvé ici, exécuter ce qui suit était la manière la plus simple de décharger des requêtes dans un fichier log sans redémarrer

SET global log_output = 'FILE';
SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';
SET global general_log = 1;

peut être éteint avec

SET global general_log = 0;
164
répondu Ram 2018-10-01 15:48:23

Top réponse ne fonctionne pas dans mysql 5.6+. Utilisez ceci à la place:

[mysqld]
general_log = on
general_log_file=/usr/log/general.log

dans votre mon.cnf / ma.fichier ini

Ubuntu/Debian : /etc/mysql/my.cnf

Windows : c:\ProgramData\MySQL\MySQL serveur 5.x

wamp : c:\wamp\bin\mysql\mysqlx.y.z\mon.151980920 "151990920 xampp : c:\xampp\mysql\bin\my.ini.

97
répondu ademin 2018-01-23 19:22:39

activer le log pour la table

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

Afficher le journal par la requête select

select * from mysql.general_log
23
répondu Vipin Yadav 2017-06-20 11:48:28

méthode rapide pour activer MySQL General Query Log sans redémarrer.

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

j'ai installé mysql via homebrew, version mysql : mysql Ver 14.14 Distrib 5.7.15, pour osx10.11 (x86_64) en utilisant EditLine wrapper

11
répondu Nanhe Kumar 2016-11-17 18:04:04

pour le record, general_log et slow_log ont été introduits en 5.1.6:

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

5.2.1. La sélection de l'interrogation Générale et Slow Query Log Destinations de Sortie

à partir de MySQL 5.1.6, le serveur MySQL offre un contrôle flexible sur le destination de la sortie vers le journal de requête général et le journal de requête lent, si ces journaux sont permettre. Les destinations possibles pour les entrées de journal sont log files ou les tables general_log et slow_log dans le mysql base de données

6
répondu Marcello Romani 2013-05-09 22:05:44

Vous devez être conscient que mysql journalisation sur un réel impact sur les performances, mais il peut être une chose sage à faire.

j'ai l'habitude de le laisser sur le serveur de dev (sauf quand il nous pousse fou :))

4
répondu Lea de Groot 2008-11-22 05:36:29

en cas d'utilisation de AWS RDS MYSQL, guide étape par étape ici.

lorsque défini comme sortie 'file', vous pouvez voir le journal directement depuis la Console AWS RDS" Log".

AWS RDS MYSQL Logging

1
répondu Gonzalo Gallotti 2016-11-27 01:24:02