2013-10-24 59 views
0

我希望MySQL將所有查詢視爲慢查詢並將它們記錄到表中。MySQL不記錄緩慢查詢到表

MySQL的版本是69年5月1日。我做了以下內容:

set global log_output = "TABLE"; 
set global log_slow_queries = 1; 
set global long_query_time = 0; 

然而,儘管查詢被執行表mysql.slow_log是空的。爲什麼? general_log也被啓用並且mysql.general_log包含所有查詢。

回答

1

動態設置這些全局變量的問題是它不會影響現有會話。

任何現有的會話將已經有@@session.long_query_time設置,這不會被@@global.long_query_time覆蓋。

如果有任何新的會話創建所做的全球變化後,他們將繼承新的價值,所以在這種情況下,你應該看到查詢的新會話,但不老的會話。

1
Did you restart the server after updating the `my.cnf` file? 

Please issue: 

    SELECT @@global.general_log; 
    SELECT @@global.general_log_file; 
    SELECT @@global.log_output; 

These are the de-facto variables as the server sees them. 
You may change tgem dynamically as follows: 

    SET GLOBAL general_log:=1; 
    SET GLOBAL log_output := 'FILE'; 

Also, as last resort, try: 

    FLUSH LOGS; 

to close+reopen log file descriptor. 
+0

我想避免重新啓動服務器。這就是爲什麼我不改變my.cnf文件,而是設置了全局變量。這用於啓用常規日誌,但它不會記錄慢日誌中的任何內容。 – travelboy

+0

'SELECT @@ global.general_log,@@ global.log_slow_queries,@@ global.log_output,@@ global.long_query_time'返回預期值1,1,表,0.00000 – travelboy

+0

爲5.6,你需要做的'''SELECT @ @ global.general_log,@@ global.slow_query_log,@@ global.log_output,@@ global.long_query_time;''' –