Comment activer la fonction MySQL qui enregistre chaque instruction de requête SQL reçue des clients et l'heure à laquelle cette instruction de requête a été soumise? Puis-je le faire dans phpmyadmin ou NaviCat? Comment analyser le journal?
Tout d'abord, n'oubliez pas que ce fichier journal peut devenir très volumineux sur un serveur occupé.
Pour mysql <5.1.29:
Pour activer le journal des requêtes, placez-le /etc/my.cnf
dans la [mysqld]
section
log = /path/to/query.log #works for mysql < 5.1.29
Aussi, pour l'activer à partir de la console MySQL
SET general_log = 1;
Voir http://dev.mysql.com/doc/refman/5.1/en/query-log.html
Pour mysql 5.1.29+
Avec mysql 5.1.29+, l' log
option est déconseillée. Pour spécifier le fichier journal et activer la journalisation, utilisez ceci dans my.cnf dans la [mysqld]
section:
general_log_file = /path/to/query.log
general_log = 1
Alternativement, pour activer la journalisation à partir de la console MySQL (vous devez également spécifier l'emplacement du fichier journal d'une manière ou d'une autre, ou trouver l'emplacement par défaut):
SET global general_log = 1;
Notez également qu'il existe des options supplémentaires pour consigner uniquement les requêtes lentes ou celles qui n'utilisent pas d'index.
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
Jetez un oeil sur cette réponse à une autre question connexe. Il montre comment activer, désactiver et afficher les journaux sur des serveurs en direct sans redémarrer.
Consigner toutes les requêtes dans 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 tables de log (voir réponse )
Activer la journalisation des requêtes sur la base de données (Notez que la chaîne 'table' doit être mise littéralement et ne pas être substituée par un nom de table. Merci Nicholas Pickering )
la source
J'utilise cette méthode pour me connecter lorsque je souhaite optimiser rapidement différents chargements de page. C'est un petit conseil ...
Connexion à une table
Vous pouvez ensuite sélectionner parmi mes
mysql.general_log
table pour récupérer les requêtes récentes.Je peux alors faire quelque chose de similaire à
tail -f
sur mysql.log, mais avec plus de raffinements ...Cela permet de voir facilement mes requêtes que je peux essayer de réduire. J'utilise un intervalle de 8 secondes pour récupérer uniquement les requêtes exécutées au cours des 8 dernières secondes.
la source
C'était déjà dans un commentaire, mais mérite sa propre réponse: Sans éditer les fichiers de configuration: dans mysql, en tant que root, faites
N'oubliez pas de l'éteindre ensuite:
la source
/tmp/
, il pourrait se retrouver quelque part comme/tmp/systemd-private-...-mariadb.service-.../tmp/
Vous pouvez désactiver ou activer le journal général des requêtes (qui enregistre toutes les requêtes) avec
la source
Je voulais également activer le fichier journal MySQL pour voir les requêtes et j'ai résolu cela avec les instructions ci-dessous
/etc/mysql/mysql.conf.d
et activer les lignes ci-dessous
/etc/init.d/mysql restart
/var/log/mysql/
voir les journauxla source
la source
Sous Windows, vous pouvez simplement accéder à
Insérez cette ligne dans my.ini
Le fichier my.ini ressemble enfin à ceci
la source
Il y a un bug dans la version MySQL 5.6. Même mysqld se présente comme:
Les paramètres sont vraiment lus dans l'ordre suivant:
Vérifiez le fichier: "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini"
J'espère que cela aidera quelqu'un.
la source
pour mysql> = 5.5 uniquement pour les requêtes lentes (1 seconde et plus) my.cfg
la source
Pour activer le journal des requêtes dans MAC Machine:
Ouvrez le fichier suivant:
Définissez l'URL du journal des requêtes sous la section 'mysqld' comme suit:
Peu de machines n'enregistrent pas correctement les requêtes, donc dans ce cas, vous pouvez l'activer à partir de la console MySQL
la source
Pas exactement une réponse à la question car la question a déjà d'excellentes réponses. Ceci est une info secondaire. L'activation de general_log a vraiment nui aux performances de MySQL. Je suis parti
general_log =1
accidentellement sur un serveur de production et j'ai passé des heures à découvrir pourquoi les performances n'étaient pas comparables à une configuration similaire sur d'autres serveurs. Ensuite, j'ai trouvé cela qui explique l'impact de l'activation du journal général. http://www.fromdual.com/general_query_log_vs_mysql_performance .Essentiel de l'histoire, ne mettez pas
general_log=1
dans le.cnf
dossier. Au lieu de cela, utilisez-leset global general_log =1
pendant une brève durée juste pour vous connecter suffisamment pour découvrir ce que vous essayez de découvrir, puis désactivez-le.la source
Dans phpMyAdmin 4.0, vous accédez à État> Moniteur. Vous pouvez y activer le journal des requêtes lentes et le journal général, voir un moniteur en direct, sélectionner une partie du graphique, voir les requêtes associées et les analyser.
la source
J'ai dû abandonner et recréer le journal général à un moment donné. Pendant la récréation, les jeux de caractères ont été gâchés et j'ai fini par avoir cette erreur dans les journaux:
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'
Donc, si la réponse standard "vérifier que la connexion est activée" ne fonctionne pas pour vous, vérifiez que vos champs ont le bon jeu de caractères.
la source