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

y a-t-il une requête/façon d'afficher les dernières requêtes exécutées sur les serveurs tous ?

404
demandé sur Good-bye 2009-03-16 15:35:54

10 réponses

pour ceux qui sont bénis avec 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 la table mysql.general_log

Si vous préférez la sortie vers un fichier au lieu d'un tableau:

  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 .fichiers cnf parce que:

  1. vous n'êtes pas en train d'éditer le fichier my.cnf et potentiellement en train de vous connecter de façon permanente
  2. vous n'êtes pas en train de pêcher autour du système de fichiers à la recherche du journal des requêtes - ou pire encore, distrait par le besoin d'une destination parfaite. /var/log /var/data/log /opt /home/mysql_savior/var
  3. redémarrer le serveur vous laisse là où vous avez commencé (log est par défaut toujours éteint)
  4. Vous n'avez pas à redémarrer le serveur et interrompre les connexions en cours.

pour en savoir plus, consultez MySQL 5.1 Manuel de Référence - Système de Serveur de Variables - general_log

677
répondu FlipMcF 2017-04-12 22:20:41

Vous pouvez activer un général journal de la requête pour ce genre de diagnostic. Généralement, vous n'enregistrez pas toutes les requêtes SELECT sur un serveur de production, mais c'est un tueur de performance.

éditez votre config MySQL, par exemple /etc/mysql/my.cnf - rechercher ou ajouter une ligne comme ceci

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

redémarrez mysql pour récupérer ce changement, maintenant vous pouvez""

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

hey presto, vous pouvez regarder les requêtes comme ils venir dans.

39
répondu Paul Dixon 2012-03-17 07:33:39

vous pouvez faire la chose fluide pour surveiller mysql logs d'interrogation.

ouvrir le fichier de configuration mysql my.cnf

sudo nano /etc/mysql/my.cnf

rechercher les lignes suivantes sous un titre [mysqld] et découpler ces lignes pour activer log

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

redémarrez votre serveur mysql pour reflect changes

sudo service mysql start

Moniteur mysql log du serveur avec la commande suivante dans un terminal

tail -f /var/log/mysql/mysql.log
14
répondu Rokibul Hasan 2017-04-12 22:22:11
SELECT * FROM  mysql.general_log  WHERE command_type ='Query' LIMIT total;
11
répondu zloctb 2015-06-18 17:49:01

1) si la journalisation mysql générale est activée, alors nous pouvons vérifier les requêtes dans le fichier log ou la table basée sur 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 d'interrogation dans la table alors

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

regardez la table mysql.general_log

si vous préférez sortir vers 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 le des requêtes dans la .mysql_history fichier chat./~ mysql_history

6
répondu minhas23 2015-11-26 07:02:31

si binlog mysql est activé, vous pouvez vérifier les commandes exécutées par l'utilisateur en exécutant suivant la commande dans la console linux en naviguant dans le répertoire binlog de mysql

mysqlbinlog binlog.000001 >  /tmp/statements.sql

activation

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

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

4
répondu Avinash Singh 2016-03-01 12:40:08

peut-être pourriez-vous le découvrir en regardant le journal d'interrogation .

3
répondu cherouvim 2009-03-16 12:39:03

vous pouvez regarder ce qui suit sous linux

cd /root

ls -al

vi .mysql_history Il peut aider à

2
répondu Avinash Singh 2013-04-17 10:22:58

après avoir lu la réponse de Paul, j'ai continué à creuser pour plus d'informations sur https://dev.mysql.com/doc/refman/5.7/en/query-log.html

j'ai trouvé un code très utile par une personne. Voici le résumé du contexte.

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

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

Vous devez ajouter une colonne supplémentaire (event_unix) et puis vous pouvez utiliser ce script pour conserver le journal propre... il va mettre à jour le timestamp dans un Unix-timestamp, supprimer les journaux de plus de 1 jour et puis mettre à jour l'event_time dans Timestamp à partir de event_unix... ça semble un peu confus, 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';

Nettoyage script:

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';

crédit à Sebastian Kaiser (auteur Original du code).

J'espère que quelqu'un le trouvera utile comme moi.

2
répondu Dev Aggarwal 2018-03-26 17:44:35

si vous n'avez pas envie de changer votre configuration MySQL, vous pouvez utiliser un profileur SQL comme" Neor Profile SQL " http://www.profilesql.com .

1
répondu Bitclaw 2016-02-12 00:13:21