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 TOUS les serveurs?

    Pour ceux dotés 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écutez SET GLOBAL general_log = 'ON';
    3. Jetez un oeil à la table mysql.general_log

    Si vous préférez produire un fichier au lieu d’une table:

    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’éditez pas le fichier my.cnf et vous my.cnf potentiellement la journalisation de manière permanente
    2. vous ne pêchez pas 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. le redémarrage du serveur vous laisse où vous avez commencé (le journal est toujours désactivé par défaut)
    4. Vous n’avez pas besoin de redémarrer le serveur et d’interrompre les connexions en cours.

    Pour plus d’informations, voir MySQL 5.1 Reference Manual – Variables système du serveur – general_log

    Vous pouvez activer un journal de requête général pour ce type de diagnostic. En règle générale, vous ne consignez pas toutes les requêtes SELECT sur un serveur de production, mais un problème de performance.

    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 ce changement, maintenant vous pouvez

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

    Hey hop, vous pouvez regarder les requêtes à leur arrivée.

    Vous pouvez faire ce que vous voulez 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 titre [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 
     SELECT * FROM mysql.general_log WHERE command_type ='Query' LIMIT total; 

    1) Si la journalisation générale de mysql 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 le tableau, alors

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

    Jetez un oeil à la table mysql.general_log

    Si vous préférez afficher 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 .mysql_history cat ~ / .mysql_history

    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 parcourant le répertoire mysql binlog

     mysqlbinlog binlog.000001 > /tmp/statements.sql 

    habilitant

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

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

    Peut-être que vous pourriez trouver cela en regardant le journal de requête .

    Vous pouvez regarder ce qui suit dans linux

     cd /root ls -al 

    vi .mysql_history Cela peut aider

    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 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 180k requêtes de log. (dans un fichier, ce serait 30 Mo par jour)

    Vous devez append 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 l’événement event_time. from 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 crédit revient à Sebastian Kaiser (écrivain original du code).

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

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