Comment puis-je activer le journal des requêtes lentes de MySQL sans redémarrer MySQL?

88

J'ai suivi les instructions ici: http://crazytoon.com/2007/07/23/mysql-changing-runtime-variables-with-out-restarting-mysql-server/ mais cela ne semble définir que le seuil.

Dois-je faire autre chose comme définir le chemin du fichier?

Selon la documentation de MySQL

Si aucune valeur nom_fichier n'est donnée pour --log-slow-queries, le nom par défaut est 
nom_hôte-slow.log. Le serveur crée le fichier dans le répertoire de données sauf si
un nom de chemin absolu est donné pour spécifier un répertoire différent. 

Fonctionnement

AFFICHER LES VARIABLES

n'indique aucun chemin de fichier journal et je ne vois aucun fichier journal de requête lente sur mon serveur ...

ÉDITER

Il semble que j'utilise la version 5.0.77 du serveur, je devais donc faire:

SET GLOBAL log_slow_queries = 1;

mais j'obtiens: ERREUR 1238 (HY000): La variable 'log_slow_queries' est une variable en lecture seule

Je suppose que je vais devoir redémarrer le serveur et avoir log_slow_queries défini dans ma configuration?

mmattax
la source
5
Pourquoi ne pas tester ça sur une boîte de développement?
Martin

Réponses:

92

Essayez SET GLOBAL slow_query_log = 'ON';et peut-êtreFLUSH LOGS;

Cela suppose que vous utilisez MySQL 5.1 ou une version ultérieure. Si vous utilisez une version antérieure, vous devrez redémarrer le serveur. Ceci est documenté dans le manuel MySQL . Vous pouvez configurer le journal dans le fichier de configuration ou sur la ligne de commande.

Ian Gregory
la source
8
FLUSH SLOW LOGS est disponible en 5.5!
Carson Reinke
A également travaillé pour moi sur 10.0.36-MariaDB. SET GLOBAL slow_query_log = 'OFF';fonctionne également comme prévu. FLUSH LOGSn'était pas nécessaire dans les deux cas.
rinogo
28

Pour les requêtes lentes sur la version <5.1, la configuration suivante a fonctionné pour moi:

log_slow_queries=/var/log/mysql/slow-query.log
long_query_time=20
log_queries_not_using_indexes=YES

Notez également de le placer sous une [mysqld]partie du fichier de configuration et de redémarrer mysqld.

Nitine
la source
2
C'est log_slow_queries plutôt que log-slow-queries
naomi
6
De plus, vous devez créer le fichier journal manuellement avant:sudo mkdir /var/log/mysql sudo touch /var/log/mysql/slow-query.log sudo chown -R _mysql /var/log/mysql/
Charles
1
log_slow_queriesest obsolète dans MySQL 5.1.29 par slow-query-log. Le manuel de référence MySQL 5.1 contient plus de détails.
Xeoncross
18

Rechercher le journal activé ou non?

SHOW VARIABLES LIKE '%log%';

Définissez les journaux: -

SET GLOBAL general_log = 'ON'; 

SET GLOBAL slow_query_log = 'ON'; 
Sivaprabu Ganesan
la source
7

Manuel MySQL - fichier journal de requête lente

Cela prétend que vous pouvez exécuter ce qui suit pour définir le fichier de journal lent (à partir de la version 5.1.6):

set global slow_query_log_file = 'path';

La variable slow_query_log contrôle simplement si elle est activée ou non.

Martin
la source
6

Ces travaux

SET GLOBAL LOG_SLOW_TIME = 1;
SET GLOBAL LOG_QUERIES_NOT_USING_INDEXES = ON;

Cassé sur ma configuration 5.1.42

SET GLOBAL LOG_SLOW_QUERIES = ON;
SET GLOBAL SLOW_QUERY_LOG = ON;
set @@global.log_slow_queries=1;

http://bugs.mysql.com/bug.php?id=32565

Il semble que la meilleure façon de faire ceci est de définir log_slow_time très haut, donc de "désactiver" le journal des requêtes lentes. Réduisez log_slow_time pour l'activer. Utilisez la même astuce (définie sur OFF) pour les log_queries_not_using_indexes.

mikeytown2
la source
5

Je pense que le problème est de s'assurer que le serveur MySQL a les droits sur le fichier et peut le modifier.

Si vous pouvez l'obtenir pour avoir accès au fichier, vous pouvez essayer de définir:
SET GLOBAL slow_query_log = 1;

Sinon, vous pouvez toujours «recharger» le serveur après avoir modifié le fichier de configuration. Sur Linux, il est généralement/etc/init.d/mysql reload

Jonathan
la source
J'obtiens: ERREUR 1193 (HY000): Variable système inconnue 'slow_query_log'
mmattax
Quelle version de MySQL utilisez-vous?
Ian Gregory
3

Si vous souhaitez activer les journaux d'erreurs généraux et le journal des erreurs de requête lente dans la table au lieu du fichier

Pour commencer la connexion dans la table au lieu du fichier:

set global log_output = TABLE”;

Pour activer le journal des requêtes générales et lentes:

set global general_log = 1;
set global slow_query_log = 1;

Pour afficher les journaux:

select * from mysql.slow_log;
select * from mysql.general_log;

Pour plus de détails, visitez ce lien

http://easysolutionweb.com/technology/mysql-server-logs/

dilraj singh
la source
1

Cela devrait fonctionner sur mysql> 5.5

AFFICHER LES VARIABLES COMME '% long%';

SET GLOBAL long_query_time = 1;

Gérard
la source