通用查詢日志記錄所有客戶端交互,對審計、排查「幽靈 SQL」極具價值。本文基於 MySQL 5.5/5.6 實測,系統講解動態開關、文件/表/混合輸出、日志遷移、性能權衡的完整操作體系。
| 變量 | 說明 | 動態修改 |
|---|---|---|
general_log | ON/OFF 開關 | ✅ |
general_log_file | 文件路徑 | ✅ |
log_output | FILE/TABLE/FILE,TABLE/NONE | ✅ |
SET GLOBAL log_output = 'FILE'; SET GLOBAL general_log_file = '/var/lib/mysql/suse11b.log'; SET GLOBAL general_log = ON; -- 執行業務 SQL... SET GLOBAL general_log = OFF;
more /var/lib/mysql/suse11b.log # 141003 16:18:12 4 Query show variables like '%general%' # 141003 16:18:55 4 Query select * from tempdb.tb1
service mysql stop mysqld --general_log_file=/tmp/suse11b.log --user=mysql & mysql -e "SET GLOBAL general_log=ON;" # 驗證 /tmp/suse11b.log 生成
SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = ON; SELECT * FROM tempdb.tb1; SELECT thread_id, command_type, argument FROM mysql.general_log;
混合模式 SET GLOBAL log_output='FILE,TABLE' 同步寫入文件與表,便於離線分析與實時查詢並行。
SET GLOBAL log_output = 'NONE'; SET GLOBAL general_log = ON; TRUNCATE TABLE tempdb.tb1; -- 文件無新增,表無新增 → 以 log_output 為準
# Linux 文件輪轉 mv hostname.log hostname-old.log mysqladmin flush-logs cp hostname-old.log /backup/ rm hostname-old.log # Windows 必須停庫重命名後再啟動
| 場景 | 建議 | 替代方案 |
|---|---|---|
| 線上故障排查(短時) | 從庫開啟 FILE 模式 10-30 分鐘 | ProxySQL 查詢審計 |
| 合規審計(長期) | 禁用 General Log | MariaDB/Percona Audit Plugin |
| 開發/測試環境 | 常開 TABLE 模式,便於 JOIN 分析 | — |
通用查詢日志是「核彈級」工具:威力大、副作用強。**動態控制 + 從庫執行 + 時間窗口限制 + 審計插件替代** 是生產環境的鐵律。