Mysql

慢查詢日誌不儲存慢查詢

  • September 10, 2020

使用 5.6.35 MySQL 社區伺服器 (GPL)。我已經按如下方式設置了本地 MySQL 實例

show variables like '%slow%query%log%'

slow_query_log  ON
slow_query_log_file /usr/local/mysql/data/MacBook-Pro-slow.log

general_log ON

但我沒有看到任何正在登錄的查詢

SELECT * FROM mysql.slow_log;

SELECT * FROM mysql.general_log

兩張桌子都是空的。我正在執行執行時間超過 20 秒的查詢,並且我的門檻值設置得很好。有什麼建議嗎?

收集一般日誌和慢日誌有兩種方法:

  • 文件(這是預設設置)
  • 表(這需要專門啟用)

根據您提供的資訊,MySQL 似乎正在使用 log_output 的預設值,即“日誌輸出到由 general_log_file 和 slow_query_log_file 定義的文件”。您可以通過查看這些文件來驗證這一點(查看文件夾 /usr/local/mysql/data/ 並查看那裡有哪些 *.log 文件)

如果您希望日誌進入數據庫,在 MySQL 客戶端上以特權使用者身份登錄時,例如 root:

  • SET GLOBAL log_output='TABLE';
  • SET GLOBAL general_log=ON;
  • SET GLOBAL slow_query_log=ON;
  • SET GLOBAL long_query_time=0;

以上將向表發送全域和慢mysql.general_log日誌mysql.slow_log

請注意,我已設置long_query_time為 0 秒,即每個查詢都轉到slow_log(即大量輸出到表中)。您可以將其更改為適合您的案例的另一個值。

此外,general_log會產生大量日誌,因此您應該只在一定時間內啟用它。

預設情況下(在您的情況下也是如此)緩慢且一般的日誌將資訊保存到正常的作業系統文件中

您的情況下的慢日誌文件:

/usr/local/mysql/data/MacBook-Pro-slow.log

你不能從mysql裡面訪問這個文件的數據

您可以通過編輯器手動打開它,或者使用專門的工具,如 - pt-query-digest

如果您想在表中有這些數據,您需要啟用寫入表 - https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_log-output

引用自:https://dba.stackexchange.com/questions/169484