Bagaimana cara mengaktifkan log kueri lambat MySQL tanpa memulai ulang MySQL?

88

Saya mengikuti instruksi di sini: http://crazytoon.com/2007/07/23/mysql-changing-runtime-variables-with-out-restarting-mysql-server/ tetapi itu tampaknya hanya mengatur ambang batas.

Apakah saya perlu melakukan hal lain seperti mengatur jalur file?

Menurut dokumen MySQL

Jika tidak ada nilai nama_file yang diberikan untuk --log-slow-queries, nama defaultnya adalah 
host_name-slow.log. Server membuat file di direktori data kecuali
nama path absolut diberikan untuk menentukan direktori yang berbeda. 

Lari

TAMPILKAN VARIABEL

tidak menunjukkan jalur file log dan saya tidak melihat file log kueri yang lambat di server saya ...

EDIT

Sepertinya saya menggunakan server versi 5.0.77, jadi saya perlu melakukan:

SETEL GLOBAL log_slow_queries = 1;

tetapi saya mendapatkan: ERROR 1238 (HY000): Variabel 'log_slow_queries' adalah variabel hanya baca

Saya berasumsi bahwa saya perlu me-restart server dan menyetel log_slow_queries di konfigurasi saya?

mmattax
sumber
5
Mengapa Anda tidak mengujinya di kotak pengembangan?
Martin

Jawaban:

93

Coba SET GLOBAL slow_query_log = 'ON';dan mungkinFLUSH LOGS;

Ini mengasumsikan Anda menggunakan MySQL 5.1 atau yang lebih baru. Jika Anda menggunakan versi sebelumnya, Anda harus memulai ulang server. Ini didokumentasikan dalam Manual MySQL . Anda dapat mengkonfigurasi log baik di file konfigurasi atau di baris perintah.

Ian Gregory
sumber
8
FLUSH SLOW LOGS tersedia dalam 5.5!
Carson Reinke
Juga bekerja untuk saya di 10.0.36-MariaDB. SET GLOBAL slow_query_log = 'OFF';bekerja seperti yang diharapkan, juga. FLUSH LOGStidak diperlukan dalam kedua kasus tersebut.
rinogo
27

Untuk kueri lambat pada versi <5.1, konfigurasi berikut berfungsi untuk saya:

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

Perhatikan juga untuk meletakkannya di bawah [mysqld]bagian dari file konfigurasi dan restart mysqld.

Nitin
sumber
2
Ini log_slow_queries daripada log-slow-queries
naomi
6
Ditambah Anda harus membuat file log secara manual sebelum:sudo mkdir /var/log/mysql sudo touch /var/log/mysql/slow-query.log sudo chown -R _mysql /var/log/mysql/
Charles
1
log_slow_queriessudah tidak digunakan lagi di MySQL 5.1.29 oleh slow-query-log. The 5.1 Reference Manual MySQL memiliki rincian lebih lanjut.
Xeoncross
18

Temukan log diaktifkan atau tidak?

SHOW VARIABLES LIKE '%log%';

Setel log: -

SET GLOBAL general_log = 'ON'; 

SET GLOBAL slow_query_log = 'ON'; 
Sivaprabu Ganesan
sumber
7

Manual MySQL - file-log-kueri-lambat

Ini mengklaim bahwa Anda dapat menjalankan perintah berikut untuk mengatur file log lambat (5.1.6 dan seterusnya):

set global slow_query_log_file = 'path';

Variabel slow_query_log hanya mengontrol apakah itu diaktifkan atau tidak.

Martin
sumber
6

Pekerjaan ini

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

Rusak pada penyiapan saya 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

Sepertinya cara terbaik untuk melakukannya adalah dengan menyetel log_slow_time sangat tinggi sehingga "mematikan" log kueri yang lambat. Turunkan log_slow_time untuk mengaktifkannya. Gunakan trik yang sama (setel ke OFF) untuk log_queries_not_using_indexes.

mikeytown2
sumber
5

Saya pikir masalahnya adalah memastikan bahwa server MySQL memiliki hak atas file tersebut dan dapat mengeditnya.

Jika Anda bisa mendapatkan akses ke file, maka Anda dapat mencoba pengaturan:
SET GLOBAL slow_query_log = 1;

Jika tidak, Anda selalu dapat 'memuat ulang' server setelah mengubah file konfigurasi. Biasanya di linux/etc/init.d/mysql reload

Jonathan
sumber
Saya mendapatkan: ERROR 1193 (HY000): Variabel sistem tidak dikenal 'slow_query_log'
mmattax
Versi MySQL apa yang Anda jalankan?
Ian Gregory
3

Jika Anda ingin mengaktifkan log kesalahan umum dan log kesalahan kueri lambat di tabel, bukan file

Untuk mulai masuk ke tabel alih-alih file:

set global log_output = “TABLE”;

Untuk mengaktifkan log kueri umum dan lambat:

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

Untuk melihat log:

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

Untuk lebih jelasnya kunjungi tautan ini

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

dilraj singh
sumber
1

Ini harus bekerja pada mysql> 5.5

TAMPILKAN VARIABEL SEPERTI '% long%';

SETEL GLOBAL long_query_time = 1;

gerard
sumber