512 votes

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

Existe-t-il une requête/un moyen de montrer les dernières requêtes exécutées sur TOUTES des serveurs ?

873voto

FlipMcF Points 3577

Pour ceux qui ont la chance d'avoir MySQL >= 5.1.12, vous pouvez contrôler cette option globalement au moment de l'exécution :

  1. Exécuter SET GLOBAL log_output = 'TABLE';
  2. Exécuter SET GLOBAL general_log = 'ON';
  3. Jetez un coup d'œil au tableau mysql.general_log

Si vous préférez que la sortie se fasse dans un fichier plutôt que dans un tableau :

  1. SET GLOBAL log_output = "FILE"; le 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 des fichiers .cnf car :

  1. vous n'êtes pas en train de modifier le my.cnf et potentiellement l'activation permanente de la journalisation
  2. vous n'êtes pas en train de pêcher dans le système de fichiers à la recherche du journal des requêtes - ou pire encore, vous n'êtes pas distrait par la nécessité de trouver la destination parfaite. /var/log /var/data/log /opt /home/mysql_savior/var
  3. Il n'est pas nécessaire de redémarrer le serveur et d'interrompre les connexions en cours.
  4. le redémarrage du serveur vous laisse au point de départ (le journal est par défaut toujours désactivé)

Pour plus d'informations, voir Manuel de référence MySQL 5.1 - Variables système du serveur - general_log

4 votes

Superbe conception de l'interface utilisateur. Quoi qu'il en soit, les tables de journalisation de MySQL utilisent en fait un moteur CSV. Vous pouvez donc faire tout ce que FlipMcF a dit dans la réponse concernant l'activation de la journalisation dans la table general_log, et avoir tail -f de general_log comme ceci : tail -f /var/lib/mysql/mysql/general_log.CSV

2 votes

Je ne sais pas si je peux me permettre de le faire, mais je ne sais pas si j'en suis capable.

0 votes

@Vangel, voir aquí . Il est là. Mais oui, c'était frustrant de ne pas le voir pour version 5.5 même si elle est indiquée pour version 5.1 .

44voto

Paul Dixon Points 122033

Vous pouvez activer un journal des requêtes générales pour ce genre de diagnostic. En général, il ne faut pas enregistrer toutes les requêtes SELECT sur un serveur de production, car cela nuit aux performances.

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

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

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

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

Hé presto, vous pouvez regarder les requêtes au fur et à mesure qu'elles arrivent.

5 votes

General_log_file et general_log dans mon my.cnf

0 votes

Cela fonctionne si vous voulez savoir redémarrer mysql askubuntu.com/questions/82374/how-do-i-start-stop-mysql-server

1 votes

Les versions plus récentes de Mac OS X (au moins sur Mac OS X) nécessitent les options general_log_file et general_log au lieu de simplement "log =". Sinon, vous obtenez une erreur comme celle-ci : ERROR /usr/local/mysql/bin/mysqld : option ambiguë '--log=/tmp/mysql_queries.log' (log-bin, log_slave_updates)

5voto

cherouvim Points 18550

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

4voto

Avinash Singh Points 45

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 naviguant dans le répertoire binlog de mysql

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

0 votes

Possible, mais douloureux. plus utile si vous cherchez à voir ce qui s'est passé dans le passé.

1voto

Avinash Singh Points 45

Vous pouvez regarder ce qui suit dans linux

cd /root

ls -al

vi .mysql_history Cela peut aider

6 votes

Il semble que cela ne fonctionnerait que pour le client mysql officiel en ligne de commande, et seulement pour les requêtes exécutées par l'utilisateur Root

0 votes

La question dit "tout le serveur", ce qui rend cette réponse incorrecte. Cela montrerait toutes les requêtes exécutées par un seul client.

0 votes

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 naviguant dans le répertoire mysql binlog mysqlbinlog binlog.000001 > /tmp/statements.sql activer [mysqld] log = /var/log/mysql/mysql.log ou le log général aura un effet sur les performances de mysql.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X