285 votes

Comment activer le Log de requêtes MySQL ?

Comment activer la fonction MySQL qui enregistre chaque instruction de requête SQL provenance de clients et le temps que l’instruction de la requête a soumis ? Je peux le faire dans phpmyadmin ou NaviCat ? Comment pour analyser le journal ?

333voto

Gryphius Points 13111

Pour activer le journal de la requête, mettez-le en /etc/my.cnf dans la [mysqld] section

log   = /path/to/query.log  #works for mysql < 5.1.29

Aussi, afin de lui permettre de console MySQL

SET general_log = 1;

Rappelez-vous que ce fichier peut devenir très gros sur un serveur occupé.

mise à jour:

Avec mysql 5.1.29+ , log option est obsolète. Pour spécifier le fichier de log d'utilisation

general_log_file=/path/to/query.log

Aussi, afin de lui permettre de console MySQL

SET global general_log = 1;

au lieu de cela. Voir http://dev.mysql.com/doc/refman/5.1/en/query-log.html

218voto

Jetez un oeil sur cette réponse à une autre question connexe. Il montre comment activer, de désactiver et de voir les logs sur les serveurs en direct sans avoir à redémarrer.

Journal de toutes les requêtes mysql


En voici un résumé:

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

  • Créez vos tableaux de bord (voir la réponse)

  • Activer la journalisation des Requêtes sur la base de données (Notez que la chaîne "table" devrait être mis littéralement et ne pas le remplacer par un nom de table. Merci Nicolas De Pickering)

SET global general_log = 1;
SET global log_output = 'table';
  • Afficher 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;

61voto

Layke Points 10216

J'utilise cette méthode pour l'enregistrement quand je veux optimiser rapidement les différentes chargement de la page. C'est une petite astuce...

Enregistrement de données dans un TABLEAU

SET global general_log = 1;
SET global log_output = 'table';

Vous pouvez ensuite sélectionner à partir de mon mysql.general_log tableau pour récupérer les requêtes récentes.

Je peux alors faire quelque chose de similaire à l' tail -f sur la base de données mysql.journal, mais avec plus de raffinements...

select * from mysql.general_log 
where  event_time  > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> "" 
and argument <> "SET NAMES 'UTF8'"  and argument <> "SHOW STATUS"  
and command_type = "Query"  and argument <> "SET PROFILING=1"

Cela rend plus facile de voir mes requêtes que je veux essayer de le réduire. J'utilise 8 secondes d'intervalle seulement récupérer les requêtes exécutées dans les 8 dernières secondes.

15voto

Jon Points 194296

Vous pouvez désactiver ou activer le log de requêtes générales (qui enregistre toutes les requêtes) avec

4voto

HimalayanCoder Points 940

Sous Windows, vous pouvez simplement aller à

Insérer cette ligne dans my.ini

Le fichier my.ini enfin ressemble à ceci

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