首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 通用查詢日志深度實戰:動態控制、多模式輸出與生產級最佳實踐

     編輯:MySQL 資料庫相關知識

通用查詢日志記錄所有客戶端交互,對審計、排查「幽靈 SQL」極具價值。本文基於 MySQL 5.5/5.6 實測,系統講解動態開關、文件/表/混合輸出、日志遷移、性能權衡的完整操作體系。

核心系統變量

變量說明動態修改
general_logON/OFF 開關✅
general_log_file文件路徑✅
log_outputFILE/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

場景二:修改日志路徑(需重啟或 flush-logs)

service mysql stop
mysqld --general_log_file=/tmp/suse11b.log --user=mysql &
mysql -e "SET GLOBAL general_log=ON;"
# 驗證 /tmp/suse11b.log 生成

場景三:TABLE 模式與混合模式

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' 同步寫入文件與表,便於離線分析與實時查詢並行。

關鍵驗證:log_output=NONE 時 general_log=ON 不產生日志

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 LogMariaDB/Percona Audit Plugin
開發/測試環境常開 TABLE 模式,便於 JOIN 分析—

總結

通用查詢日志是「核彈級」工具:威力大、副作用強。**動態控制 + 從庫執行 + 時間窗口限制 + 審計插件替代** 是生產環境的鐵律。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved