web-dev-qa-db-fra.com

Enregistrer toutes les requêtes dans mysql

Est-il possible pour moi d'activer l'enregistrement d'audit sur ma base de données mysql?

En gros, je souhaite surveiller toutes les requêtes pendant une heure et vider le journal dans un fichier.

247
public static

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

mysqld --log=log_file_name

ou placez le texte suivant dans votre fichier my.cnf:

log = log_file_name

L'une ou l'autre enregistrera toutes les requêtes dans nom_fichier_journal.

Vous pouvez également ne consigner que les requêtes lentes à l'aide de l'option --log-slow-queries au lieu de --log. Par défaut, les requêtes qui durent 10 secondes ou plus sont considérées comme lentes. Vous pouvez le modifier en définissant long_query_time sur le nombre de secondes qu'une requête doit prendre pour s'exécuter avant d'être enregistrée.

157
Robert Gamble

(Note: Pour mysql-5.6 +, cela ne fonctionnera pas. Il existe une solution qui s'applique à mysql-5.6 + si vous faites défiler l'écran ou cliquez ici .)

Si vous ne voulez pas ou ne pouvez pas redémarrer le serveur MySQL, vous pouvez procéder comme suit sur votre serveur en cours d'exécution:

  • Créez vos tables de journal sur la base de données mysql
  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';
  • Voir 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;
211
Alexandre Marcondes

En plus de ce que j’ai trouvé ici, exécuter ce qui suit est le moyen le plus simple de transférer les requêtes dans un fichier journal 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 désactivé avec 

SET global general_log = 0;
177
Ram

La meilleure 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 fichier my.cnf/my.ini

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

Activer le journal pour la table

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

Afficher le journal par requête de sélection

select * from mysql.general_log
26
Vipin Yadav

Moyen rapide d'activer le journal de requêtes générales MySQL 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) à l’aide de l’éditeur EditLine

11
Nanhe Kumar

Pour mémoire, general_log et slow_log ont été introduits dans 5.1.6:

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

5.2.1. Sélection des destinations de sortie de la requête générale et du journal de requête lent

Depuis MySQL 5.1.6, MySQL Server offre un contrôle flexible sur le fichier destination de la sortie vers le journal de requête général et le journal de requête lent, si ces journaux sont activés. Les destinations possibles pour les entrées de journal sont les fichiers journaux ou les tables general_log et slow_log dans le fichier mysql base de données

6
Marcello Romani

Vous devez savoir que la connexion à MySQL a un impact important sur les performances, mais cela peut être une bonne chose à faire.

Je le laisse généralement sur le serveur de développement (sauf quand il nous rend fous :))

5
Lea de Groot

Dans le cas où AWS RDS MYSQL est utilisé, guide étape par étape ici.

Lorsqu'il est défini en tant que sortie 'fichier', vous pouvez afficher le journal directement à partir de la console "Journal" AWS RDS.

Journalisation AWS RDS MYSQL

1
Gonzalo Gallotti

Version OS/mysql:

$ 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

Ajout de la journalisation (par exemple, je ne pense pas que /var/log/... soit le meilleur chemin sous Mac OS mais cela a fonctionné:

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 redémarré

Résultat:

$ 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
0
Raphvanns