web-dev-qa-db-fra.com

Comment afficher les dernières requêtes exécutées sur MySQL?

Existe-t-il une requête/un moyen d'afficher les dernières requêtes exécutées sur les serveurs ALL?

443
FerranB

Pour ceux qui bénéficient de MySQL> = 5.1.12, vous pouvez contrôler cette option globalement à l'exécution:

  1. Exécuter SET GLOBAL log_output = 'TABLE';
  2. Exécuter SET GLOBAL general_log = 'ON';
  3. Regardez le tableau mysql.general_log

Si vous préférez exporter dans un fichier plutôt que dans une table:

  1. SET GLOBAL log_output = "FILE"; la valeur par défaut .
  2. SET GLOBAL general_log_file = "/path/to/your/logfile.log";
  3. SET GLOBAL general_log = 'ON';

Je préfère cette méthode à l'édition de fichiers .cnf pour les raisons suivantes:

  1. vous n'éditez pas le fichier my.cnf et n'activez potentiellement de manière permanente la journalisation
  2. vous ne pêchez pas dans le système de fichiers à la recherche du journal des requêtes - ou pire encore, distrait par le besoin de la destination idéale. /var/log /var/data/log/opt /home/mysql_savior/var
  3. Vous n'avez pas à redémarrer le serveur et à interrompre les connexions en cours.
  4. le redémarrage du serveur vous laisse là où vous avez démarré (le journal est toujours désactivé par défaut)

Pour plus d'informations, reportez-vous à la section Manuel de référence MySQL 5.1 - Variables système du serveur - general_log

740
FlipMcF

Vous pouvez activer un journal de requête général pour ce type de diagnostic. Généralement, vous ne consignez pas toutes les requêtes SELECT sur un serveur de production, c'est un tueur de performances.

Modifiez votre configuration MySQL, par exemple. /etc/mysql/my.cnf - cherche ou ajoute une ligne comme celle-ci

[mysqld]
log = /var/log/mysql/mysql.log

Redémarrez mysql pour prendre ce changement, maintenant vous pouvez

tail -f /var/log/mysql/mysql.log

Hé hop, vous pouvez regarder les requêtes quand elles arrivent.

42
Paul Dixon

Vous pouvez faire ce qui suit pour surveiller les journaux de requêtes mysql.

Ouvrez le fichier de configuration mysql my.cnf

Sudo nano /etc/mysql/my.cnf

Recherchez les lignes suivantes sous un en-tête [mysqld] et décommentez ces lignes pour activer le journal.

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Redémarrez votre serveur mysql pour refléter les changements

Sudo service mysql start

Surveiller le journal du serveur mysql avec la commande suivante dans le terminal

tail -f /var/log/mysql/mysql.log
16
Rokibul Hasan
SELECT * FROM  mysql.general_log  WHERE command_type ='Query' LIMIT total;
14
zloctb

1) Si la journalisation mysql générale est activée, nous pouvons vérifier les requêtes dans le fichier journal ou la table en fonction de ce que nous avons mentionné dans la configuration. Vérifiez ce qui est activé avec la commande suivante

mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';

Si nous avons besoin de l'historique des requêtes dans la table, alors

Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';

Jetez un coup d'oeil à la table mysql.general_log

Si vous préférez exporter dans un fichier:

SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';

2) Nous pouvons également vérifier les requêtes dans le fichier cat. ~/.Mysql_history du fichier .mysql_history

9
minhas23

Peut-être pourriez-vous le découvrir en consultant le journal des requêtes .

4
cherouvim

Si mysql binlog est activé, vous pouvez vérifier les commandes exécutées par l'utilisateur en exécutant la commande suivante dans la console Linux en accédant au répertoire mysql binlog.

mysqlbinlog binlog.000001 >  /tmp/statements.sql

permettant

[mysqld]
log = /var/log/mysql/mysql.log

ou le journal général aura un effet sur les performances de mysql

4
Avinash Singh

Si vous ne souhaitez pas modifier votre configuration MySQL, vous pouvez utiliser un profileur SQL tel que "Neor Profile SQL" http://www.profilesql.com .

2
Bitclaw

Après avoir lu la réponse de Paul, je cherchai plus d'informations sur https://dev.mysql.com/doc/refman/5.7/fr/query-log.html

J'ai trouvé un code vraiment utile par une personne. Voici le résumé du contexte.

(Remarque: le code suivant n'est pas le mien)

Ce script est un exemple pour garder la table propre, ce qui vous aidera à réduire la taille de votre table. Comme après une journée, il y aura environ 180 000 requêtes de journal. (dans un fichier, ce serait 30 Mo par jour)

Vous devez ajouter une colonne supplémentaire (event_unix), puis utiliser ce script pour garder le journal propre ... il mettra à jour l'horodatage dans un horodatage Unix, supprimera les journaux antérieurs à 1 jour, puis mettra à jour event_time en horodatage. de event_unix ... semble un peu déroutant, mais ça marche très bien.

Commandes pour la nouvelle colonne:

SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';

Script de nettoyage:

SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';

Le mérite revient à Sebastian Kaiser (auteur original du code).

J'espère que quelqu'un trouvera cela utile comme je l'ai fait.

2
Dev Aggarwal

Vous pouvez regarder ce qui suit dans linux

cd /root

ls -al

vi .mysql_history Cela peut aider

1
Avinash Singh