| 日志類型 | 用途 | 性能影響 |
|---|---|---|
| Error Log | 服務啟停、崩潰、關鍵錯誤 | 極低,建議始終開啟 |
| General Query Log | 所有連接/斷開/查詢語句 | 高(磁盤 IO 大),調試時短期開啟 |
| Slow Query Log | 執行時間超過閾值的 SQL | 低,建議生產長期開啟 |
不建議開啟:Binary Log(除非主從復制/時間點恢復),高性能消耗。
[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 # 記錄未用索引查詢
SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL general_log = 'OFF';
SET GLOBAL slow_query_log = 'OFF';
# 錯誤日志(走 syslog 時)
tail -f /var/log/syslog
# 一般查詢日志
tail -f /var/log/mysql/mysql.log
# 慢查詢日志
tail -f /var/log/mysql/mysql-slow.log
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
}
mysql> SHOW VARIABLES LIKE '%log%';
關鍵變量:general_log、slow_query_log、log_error、log_output(FILE/TABLE/NONE)。
long_query_time=1~2)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'