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 ?
Réponses
Trop de publicités?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
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;
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.