Come posso abilitare il log delle query lente di MySQL senza riavviare MySQL?


88

Ho seguito le istruzioni qui: http://crazytoon.com/2007/07/23/mysql-changing-runtime-variables-with-out-restarting-mysql-server/ ma sembra impostare solo la soglia.

Devo fare qualcos'altro come impostare il percorso del file?

Secondo i documenti di MySQL

Se non viene fornito alcun valore file_name per --log-slow-queries, il nome predefinito è 
nome_host-slow.log. Il server crea il file nella directory dei dati a meno che
viene assegnato un nome di percorso assoluto per specificare una directory diversa. 

In esecuzione

MOSTRA VARIABILI

non indica alcun percorso del file di registro e non vedo alcun file di registro delle query lente sul mio server ...

MODIFICARE

Sembra che sto usando la versione del server 5.0.77, quindi dovevo fare:

SET GLOBAL log_slow_queries = 1;

ma ottengo: ERRORE 1238 (HY000): la variabile 'log_slow_queries' è una variabile di sola lettura

Presumo che avrò bisogno di riavviare il server e avere log_slow_queries impostato nella mia configurazione?


5
Perché non lo provi su una scatola di sviluppo?
Martin

Risposte:


93

Prova SET GLOBAL slow_query_log = 'ON';e forseFLUSH LOGS;

Ciò presuppone che tu stia utilizzando MySQL 5.1 o successivo. Se stai utilizzando una versione precedente, dovrai riavviare il server. Questo è documentato nel Manuale MySQL . È possibile configurare il registro nel file di configurazione o dalla riga di comando.


8
FLUSH SLOW LOGS è disponibile in 5.5!
Carson Reinke

Ha funzionato anche per me su 10.0.36-MariaDB. SET GLOBAL slow_query_log = 'OFF';funziona anche come previsto. FLUSH LOGSnon era necessario in entrambi i casi.
rinogo

28

Per le query lente sulla versione <5.1, la seguente configurazione ha funzionato per me:

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

Nota anche di metterlo sotto una [mysqld]parte del file di configurazione e riavviare mysqld.


2
Sono log_slow_queries piuttosto che log-slow-queries
naomi

6
Inoltre devi creare il file di registro manualmente prima:sudo mkdir /var/log/mysql sudo touch /var/log/mysql/slow-query.log sudo chown -R _mysql /var/log/mysql/
Charles

1
log_slow_queriesè stato deprecato in MySQL 5.1.29 da slow-query-log. Il Manuale di riferimento di MySQL 5.1 contiene maggiori dettagli.
Xeoncross

18

Trova registro abilitato o no?

SHOW VARIABLES LIKE '%log%';

Imposta i registri: -

SET GLOBAL general_log = 'ON'; 

SET GLOBAL slow_query_log = 'ON'; 


6

Questi funzionano

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

Rotto sulla mia configurazione 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

Sembra che il modo migliore per farlo sia impostare log_slow_time molto alto, "disattivando" il log delle query lente. Abbassa log_slow_time per abilitarlo. Usa lo stesso trucco (impostato su OFF) per log_queries_not_using_indexes.


5

Penso che il problema sia assicurarsi che il server MySQL abbia i diritti sul file e possa modificarlo.

Se riesci a ottenere l'accesso al file, puoi provare a impostare:
SET GLOBAL slow_query_log = 1;

In caso contrario, puoi sempre "ricaricare" il server dopo aver modificato il file di configurazione. Su Linux di solito/etc/init.d/mysql reload


Ottengo: ERRORE 1193 (HY000): variabile di sistema sconosciuta 'slow_query_log'
mmattax

Quale versione di MySQL stai utilizzando?
Ian Gregory

3

Se si desidera abilitare i log degli errori generali e il log degli errori delle query lente nella tabella anziché nel file

Per iniziare ad accedere alla tabella invece che al file:

set global log_output = “TABLE”;

Per abilitare il registro delle query generale e lento:

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

Per visualizzare i log:

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

Per maggiori dettagli visita questo link

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


1

Questo dovrebbe funzionare su mysql> 5.5

MOSTRA VARIABILI COME '% long%';

SET GLOBAL long_query_time = 1;

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.