首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 通用查詢日誌啟用、輸出模式與管理實戰

     編輯:MySQL 綜合教學

MySQL 通用查詢日誌啟用、輸出模式與管理實戰

通用查詢日誌記錄所有客戶端連接與執行的 SQL,對審計、問題追蹤極有價值。MySQL 5.1.6+ 支援動態修改日誌開關、輸出目標與路徑,無需重啟。

一、核心系統變數

變數說明預設值
log_output輸出目標:FILE、TABLE、FILE,TABLE、NONEFILE
general_log開關:ON/OFFOFF
general_log_file檔案路徑(僅 FILE 模式生效)host_name.log

二、動態配置範例

-- 1. 設定輸出到檔案
SET GLOBAL log_output = 'FILE';
SET GLOBAL general_log_file = '/tmp/general.log';

-- 2. 開啟日誌
SET GLOBAL general_log = ON;

-- 3. 執行業務 SQL...
SELECT * FROM tempdb.tb1;

-- 4. 關閉日誌
SET GLOBAL general_log = OFF;

三、輸出模式演示

1. FILE 模式(預設)

/usr/sbin/mysqld, Version: 5.5.39-log. started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time            Id  Command    Argument
141003 16:18:55  4  Query      select * from tempdb.tb1

2. TABLE 模式

SET GLOBAL log_output = 'TABLE';
-- 查詢 mysql.general_log 表
SELECT thread_id, command_type, argument
FROM mysql.general_log
WHERE argument LIKE '%tb1%';

表結構:

+--------------+------------------+------+-----+-------------------+-----------------------------+
| Field        | Type             | Null | Key | Default           | Extra                       |
+--------------+------------------+------+-----+-------------------+-----------------------------+
| event_time   | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| user_host    | mediumtext       | NO   |     | NULL              |                             |
| thread_id    | int(11)          | NO   |     | NULL              |                             |
| server_id    | int(10) unsigned | NO   |     | NULL              |                             |
| command_type | varchar(64)      | NO   |     | NULL              |                             |
| argument     | mediumtext       | NO   |     | NULL              |                             |
+--------------+------------------+------+-----+-------------------+-----------------------------+

3. 混合模式 FILE,TABLE

SET GLOBAL log_output = 'FILE,TABLE';
-- 同時寫入檔案與 mysql.general_log 表

四、日誌備份與輪轉

Linux/Unix

mv hostname.log hostname-old.log
mysqladmin flush-logs
cp hostname-old.log /backup/
rm hostname-old.log

Windows

必須先停止服務,重命名檔案,再啟動服務建立新日誌。

五、關閉日誌的完整邏輯

SET GLOBAL general_log = OFF;  -- 關閉開關,無論 log_output 為何值均不再記錄
SET GLOBAL log_output = 'NONE'; -- 進一步禁用輸出通道

驗證:執行 DML 後檢查檔案與表均無新記錄。

六、最佳實踐建議

  1. 僅按需開啟:通用日誌量極大,建議僅在排查具體問題時短暫開啟(如 10-30 分鐘)。
  2. 優先使用 TABLE 模式:配合 SQL 過濾分析,避免巨大文字檔難以處理;定期 TRUNCATE TABLE mysql.general_log。
  3. 配合 logrotate:FILE 模式下務必配置日誌輪轉,防止磁碟寫滿。
  4. 權限控制:mysql.general_log 表預設為 CSV 引擎,任何有 SELECT 權限的用戶可讀取,敏感環境需限制訪問。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved