# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
general_log = 1
general_log_file = /var/lib/mysql/sql_query.log
# 或
log = /var/lib/mysql/sql_query.log # 5.7 兼容寫法
# 重啟生效
systemctl restart mysqld
-- 開啟
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/lib/mysql/sql_query.log';
-- 關閉
SET GLOBAL general_log = 'OFF';
✅ 即時生效,無需重啟服務,適合生產環境短期排查。
/usr/sbin/mysqld, Version: 5.7.31 (MySQL Community Server). started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
2024-01-15T10:30:01 10 Connect root@localhost on testdb
2024-01-15T10:30:01 10 Query SELECT @@version_comment LIMIT 1
2024-01-15T10:30:02 10 Query SELECT * FROM users WHERE id = 1
2024-01-15T10:30:05 10 Quit
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 0.5
log_queries_not_using_indexes = 1
min_examined_row_limit = 100
僅記錄問題 SQL,效能影響極小。
-- Binlog 記錄所有 DML/DDL(ROW 格式含完整行變更)
mysqlbinlog --base64-output=decode-rows -v \
--start-datetime="2024-01-15 10:00:00" \
--stop-datetime="2024-01-15 11:00:00" \
mysql-bin.000123 | grep -A5 -B5 "sensitive_table"
server_audit=ON,支援過濾用戶/資料庫/表/操作類型,輸出 JSON/CSV在 ORM/DAO 層統一攔截記錄:執行 SQL、參數、耗時、呼叫堆疊。對資料庫零侵入,彈性最高。