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

MySQL 日志完全指南:錯誤/一般/慢查詢日志啟用、查看與輪轉策略

     編輯:MySQL 綜合教學

MySQL 日志完全指南:錯誤/一般/慢查詢日志啟用、查看與輪轉策略

1. 三大核心日志類型

日志類型用途性能影響
Error Log服務啟停、崩潰、關鍵錯誤極低,建議始終開啟
General Query Log所有連接/斷開/查詢語句高(磁盤 IO 大),調試時短期開啟
Slow Query Log執行時間超過閾值的 SQL低,建議生產長期開啟

不建議開啟:Binary Log(除非主從復制/時間點恢復),高性能消耗。

2. 配置文件啟用(需重啟)

[mysqld]
# 錯誤日志(Debian 默認走 syslog,可改文件)
log_error = /var/log/mysql/mysql_error.log

# 一般查詢日志
general_log = 1
general_log_file = /var/log/mysql/mysql.log

# 慢查詢日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2          # 超過 2 秒記錄
log_queries_not_using_indexes = 1  # 記錄未用索引查詢

3. 運行時動態啟用(無需重啟,MySQL 5.1+)

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

SET GLOBAL general_log = 'OFF';
SET GLOBAL slow_query_log = 'OFF';

4. 日志查看命令

# 錯誤日志(走 syslog 時)
tail -f /var/log/syslog

# 一般查詢日志
tail -f /var/log/mysql/mysql.log

# 慢查詢日志
tail -f /var/log/mysql/mysql-slow.log

5. 日志輪轉(防止磁盤撐爆)

Debian/Ubuntu 默認配置 /etc/logrotate.d/mysql-server:每日輪轉,保留 7 天,壓縮,執行 mysqladmin flush-logs 通知 MySQL 重新打開文件。

/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log {
    daily
    rotate 7
    missingok
    compress
    sharedscripts
    postrotate
        /usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
    endscript
}

6. 驗證配置生效

mysql> SHOW VARIABLES LIKE '%log%';

關鍵變量:general_log、slow_query_log、log_error、log_output(FILE/TABLE/NONE)。

7. 何時開啟哪種日志

  • Error Log:始終開啟
  • General Log:調試連接泄漏、驗證應用 SQL 行為、測試緩存命中率(短期,運行時開啟)
  • Slow Query Log:性能下降排查、定期審計慢 SQL(長期開啟,long_query_time=1~2)

8. 一般查詢日志示例

131021 17:43:50  43 Connect root@localhost on pnet_blog
43 Query SELECT count(*) FROM posts WHERE date_published <= '20131021144350'
43 Query SELECT * FROM posts ORDER BY date_published DESC LIMIT 0,10
44 Connect root@localhost on pnet_blog
44 Query SELECT id, title FROM tips WHERE date_published <= '20131021144350'
45 Query UPDATE posts SET impressions=impressions+1 WHERE id='41'
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved