SQL Server 有 Profiler,MySQL 如何追蹤執行的 SQL?最直接的方法是開啟 General Query Log(一般查詢日誌)。本文說明 Windows/Linux 環境下的配置步驟、日誌分析技巧與效能影響提醒。
my.ini(通常在 MySQL 安裝目錄,如 G:\Program Files (x86)\MySQL\MySQL Server 5.0\)[mysqld] 區段下新增:log = G:/Program Files (x86)/MySQL/MySQL Server 5.0/data/mysql.log

data/mysql.log)/etc/my.cnf[mysqld] 區段新增:log = /var/log/mysql/mysql.log
mkdir -p /var/log/mysql && chown mysql:mysql /var/log/mysqlsystemctl restart mysqld 或 service mysql restart-- 查看狀態
SHOW VARIABLES LIKE 'general_log%';
-- general_log=OFF, general_log_file=/var/lib/mysql/host.log
-- 開啟
SET GLOBAL general_log = ON;
SET GLOBAL general_log_file = '/var/log/mysql/query.log';
-- 關閉
SET GLOBAL general_log = OFF;
/usr/sbin/mysqld, Version: 5.7.33 (Ubuntu). started with:
Tcp port: 3306 Unix socket: /var/run/mysqld/mysqld.sock
Time Id Command Argument
2023-05-01T10:15:23.123456Z 12 Connect root@localhost on testdb
2023-05-01T10:15:23.123567Z 12 Query SELECT * FROM users WHERE id = 1
2023-05-01T10:15:23.123678Z 12 Quit
Time:執行時間(含微秒)Id:連線執行緒 IDCommand:Connect, Query, Quit, Prepare, Execute, Close stmt 等Argument:完整 SQL 文本或連線資訊| 影響 | 說明 |
|---|---|
| I/O 開銷 | 每條 SQL 同步寫入磁碟,高併發下嚴重拖慢效能 |
| 磁碟空間 | 日誌增長極快,需配合 logrotate 定期輪轉 |
| 安全性 | 記錄含敏感資料的 SQL(如密碼、個資),存取需管控 |
生產環境建議:
log_output=TABLE 寫入 mysql.general_log 表配合定期清理slow_query_log=ON + long_query_time),而非一般日誌SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = ON;
-- 查詢日誌
SELECT * FROM mysql.general_log ORDER BY event_time DESC LIMIT 100;
善用一般查詢日誌快速定位問題,但務必謹記「用完即關」,避免成為效能殺手。