首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 5.7.9 開啟慢查詢日志踩坑記:權限、動態配置與文件管理

     編輯:MySQL 綜合教學

背景

  • 環境:MySQL 5.7.9 作為 Zabbix 2.4.7 監控庫。
  • 現象:動態開啟慢查詢日志 SET GLOBAL slow_query_log=1; 後,日志文件膨脹至 700MB,多為 0.1 秒級查詢。
  • 目標:調整閾值至 5 秒,持久化配置,解決文件權限報錯。

配置文件修改 (/etc/my.cnf)

mysql> SHOW VARIABLES LIKE '%query%';
+------------------------------+---------------------------------+
| Variable_name                | Value                           |
+------------------------------+---------------------------------+
| slow_query_log               | OFF                             |  <-- 仍為 OFF!
| slow_query_log_file          | /MYSQLDATA/mysql_slow_query.log |
| long_query_time              | 5.000000                        |  <-- 閾值生效了
| ...                          | ...                             |
+------------------------------+---------------------------------+

動態開啟報錯

# 1. 創建文件並授權
mkdir -p /MYSQLDATA
touch /MYSQLDATA/mysql_slow_query.log
chown mysql:mysql /MYSQLDATA /MYSQLDATA/mysql_slow_query.log

# 2. 確認配置區塊正確
grep -A5 '^\[mysqld\]' /etc/my.cnf | grep slow_query_log
# 必須在 [mysqld] 區塊

# 3. 重啟服務 (或動態開啟)
systemctl restart mysqld
# 或
mysql> SET GLOBAL slow_query_log=1;  # 此時應成功

# 4. 驗證
mysql> SHOW VARIABLES LIKE 'slow_query_log';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| slow_query_log   | ON    |
+------------------+-------+

最佳實踐補充

項目建議
日志目錄獨立掛載點 /var/log/mysql/ 或 /data/mysql/log/,避免佔滿根分區
權限模型目錄 mysql:mysql 750,文件 mysql:mysql 640
輪轉策略logrotate 每日切割、壓縮、保留 30 天,postrotate 執行 mysqladmin flush-logs
閾值設置核心交易庫 long_query_time=1 (秒);分析庫可設 0.1 或 0 (全記錄)
不走索引記錄log_queries_not_using_indexes=ON 配合 log_throttle_queries_not_using_indexes=60 (每分鐘限 60 條) 防刷日志
輸出到 TABLElog_output=TABLE 寫入 mysql.slow_log 表,便于 SQL 查詢分析,需定期 TRUNCATE 清理
分析工具pt-query-digest (Percona Toolkit) / mysqldumpslow / MySQL Workbench 圖形化分析

總結

MySQL 慢查詢日志「三大坑」:**文件不自建、權限要匹配、區塊別放錯**。
標準化交付時,將 touch + chown + logrotate 寫入 Ansible/Shell 腳本,**配置區塊強制審查**,上線前必跑 SET GLOBAL slow_query_log=1; SELECT 1; 煙霧測試。
慢查詢日志是性能優化的「體檢報告」,管好它的生成、輪轉、分析閉環,才能讓數據庫長期健康運行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved