strace
Le moyen le plus rapide de voir les requêtes MySQL / MariaDB en direct est d'utiliser le débogueur. Sous Linux, vous pouvez utiliser strace
, par exemple:
sudo strace -e trace=read,write -s 2000 -fp $(pgrep -nf mysql) 2>&1
Puisqu'il y a beaucoup de caractères d'échappement, vous pouvez formater la sortie de strace par piping (ajoutez simplement |
entre ces deux lignes simples ) ci-dessus dans la commande suivante:
grep --line-buffered -o '".\+[^"]"' | grep --line-buffered -o '[^"]*[^"]' | while read -r line; do printf "%b" $line; done | tr "\r\n" "\275\276" | tr -d "[:cntrl:]" | tr "\275\276" "\r\n"
Vous devriez donc voir des requêtes SQL assez propres sans délai, sans toucher aux fichiers de configuration.
Évidemment, cela ne remplacera pas la manière standard d'activer les journaux, qui est décrite ci-dessous (qui implique de recharger le serveur SQL).
dtrace
Utilisez des sondes MySQL pour afficher les requêtes MySQL en direct sans toucher au serveur. Exemple de script:
#!/usr/sbin/dtrace -q
pid$target::*mysql_parse*:entry /* This probe is fired when the execution enters mysql_parse */
{
printf("Query: %s\n", copyinstr(arg1));
}
Enregistrez le script ci-dessus dans un fichier (comme watch.d
) et exécutez:
pfexec dtrace -s watch.d -p $(pgrep -x mysqld)
En savoir plus: Premiers pas avec DTracing MySQL
Gibbs MySQL Spyglass
Voir cette réponse .
Journaux
Voici les étapes utiles au développement proposé.
Ajoutez ces lignes dans votre ~/.my.cnf
ou global my.cnf
:
[mysqld]
general_log=1
general_log_file=/tmp/mysqld.log
Chemins d'accès: /var/log/mysqld.log
ou /usr/local/var/log/mysqld.log
peuvent également fonctionner en fonction de vos autorisations de fichier.
puis redémarrez votre MySQL / MariaDB par (préfixez sudo
si nécessaire):
killall -HUP mysqld
Vérifiez ensuite vos journaux:
tail -f /tmp/mysqld.log
Après la fin, le changement general_log
à 0
(vous pouvez l' utiliser à l' avenir), puis retirez à nouveau le fichier et redémarrez le serveur SQL: killall -HUP mysqld
.