不同於 SQL Server 的 Profiler,MySQL 內建 General Query Log 記錄所有客戶端連線與執行的 SQL 語句,是排查應用行為、效能分析、審計的利器。
my.ini (通常在 MySQL 安裝目錄,如 G:\Program Files\MySQL\MySQL Server 5.0\)。[mysqld] 區段新增:log = "G:/Program Files/MySQL/MySQL Server 5.0/data/mysql.log"data/mysql.log)。/etc/my.cnf (或 /etc/mysql/my.cnf)。[mysqld] 區段新增:log = /var/log/mysql/mysql.logmkdir -p /var/log/mysql && chown mysql:mysql /var/log/mysqlsystemctl restart mysqld。-- 開啟
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/mysql.log'; -- 可選,指定檔案
-- 關閉
SET GLOBAL general_log = 'OFF';
動態修改即時生效,適合臨時排查。
2024-01-15 10:30:45 123 Connect app_user@192.168.1.5 on test_db
2024-01-15 10:30:45 123 Query SELECT * FROM users WHERE id = 1
2024-01-15 10:30:46 123 Query UPDATE orders SET status = 2 WHERE id = 100
2024-01-15 10:30:46 123 Quit
欄位:時間、執行緒 ID、命令類型、SQL 內容。
建議:
1. 僅臨時開啟排查,用畢即關。
2. 生產長期審計請用 Audit Plugin 或 Binlog (行基礎)。
3. 配合 logrotate 定期切割壓縮。
# 即時追蹤
tail -f /var/log/mysql/mysql.log
# 過濾特定表
grep -i "from users" /var/log/mysql/mysql.log
# 統計最高頻 SQL
awk '/Query/ {print $0}' /var/log/mysql/mysql.log | sort | uniq -c | sort -nr | head -20
善用 General Log 追蹤 SQL,搭配動態開關與日誌切割,讓排查更高效且安全。