MySQL 日誌分散在配置文件、啟動腳本、進程參數中,修改需找準位置。四大日誌:錯誤日誌、慢查詢日誌、通用查詢日誌、二進制日誌。
# 方法一:SHOW VARIABLES
SHOW VARIABLES LIKE '%log_file%';
SHOW VARIABLES LIKE '%log%path%';
SHOW VARIABLES LIKE 'log_error';
SHOW VARIABLES LIKE 'slow_query_log_file';
SHOW VARIABLES LIKE 'general_log_file';
SHOW VARIABLES LIKE 'log_bin';
# 方法二:檢視進程啟動參數 (最準確)
ps aux | grep mysqld
# 輸出含 --log-error=/var/log/mysqld.log --pid-file=... --datadir=...
my.cnf [mysqld] log_error=/var/log/mysql/error.log/etc/init.d/mysqld 啟動腳本變量 errlogfile (由 get_mysql_option mysqld_safe log-error 讀取)/var/log/mysqld.logmy.cnf 設定,重啟生效。[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = ON
SET GLOBAL slow_query_log=ON;logrotate 配合 mysqladmin flush-logs。[mysqld]
general_log = ON
general_log_file = /var/log/mysql/mysql-general.log
SET GLOBAL log_output='TABLE';[mysqld]
log_bin = /var/log/mysql/mysql-bin
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 1G
sync_binlog = 1
mysql-bin),實際檔案 mysql-bin.000001 等。log_bin_index 記錄所有 binlog 檔案清單。/etc/my.cnf (或 /etc/mysql/my.cnf):[mysqld]log_error = /data/mysql/logs/error.logmkdir -p /data/mysql/logs && chown mysql:mysql /data/mysql/logssystemctl restart mysqldSHOW VARIABLES LIKE 'log_error'; + tail -f /data/mysql/logs/error.log| 坑點 | 現象 | 解決 |
|---|---|---|
| my.cnf 改了不生效 | 啟動腳本 /etc/init.d/mysqld 覆蓋讀取舊值 | 同步修改啟動腳本變量,或改用 systemd 管理 (Override.conf) |
| 日誌目錄權限不足 | 啟動失敗 Permission denied | chown mysql:mysql /log/dir,SELinux restorecon |
| Binlog 滿盤 | 磁碟 100%,服務掛起 | 設定 expire_logs_days、max_binlog_size、監控告警 |
| Slow log 未記錄 | long_query_time 設太大/未開啟 | 設 1 秒、動態開啟 SET GLOBAL slow_query_log=ON |