萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 查看 SQL 執行歷史記錄的方法總結

方法一:客戶端歷史檔案(僅限互動式客戶端)

cat ~/.mysql_history
  • 僅記錄在 mysql 命令列工具中手工執行的語句。
  • 不包含應用程式透過 Connector 執行的 SQL。

方法二:通用查詢日誌 - 表模式 (MySQL 5.1+ / MariaDB)

啟用

SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';

查看記錄

USE mysql;
SELECT * FROM general_log ORDER BY event_time DESC LIMIT 20;

輸出欄位

  • event_time:執行時間(微秒精度)。
  • user_host:用戶@主機。
  • thread_id:連線 ID。
  • command_type:Query / Connect / Quit 等。
  • argument:完整 SQL 文本。

方法三:通用查詢日誌 - 檔案模式(持久化、適合審計)

SET GLOBAL log_output = 'FILE';
SET GLOBAL general_log_file = '/var/log/mysql/general.log';
SET GLOBAL general_log = 'ON';

配置檔永久生效:

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log
log_output = FILE

即時追蹤:tail -f /var/log/mysql/general.log

方法四:慢查詢日誌(僅記錄慢 SQL)

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

分析工具:pt-query-digest /var/log/mysql/slow.log。

方法五:Performance Schema (MySQL 5.6+)

-- 啟用 statement 級檢測
UPDATE performance_schema.setup_instruments SET ENABLED='YES', TIMED='YES' WHERE NAME LIKE 'statement/%';
UPDATE performance_schema.setup_consumers SET ENABLED='YES' WHERE NAME LIKE 'events_statements%';

-- 查看最近 100 條 SQL 耗時
SELECT DIGEST_TEXT, COUNT_STAR, AVG_TIMER_WAIT/1e12 AS avg_sec
FROM performance_schema.events_statements_summary_by_digest
ORDER BY AVG_TIMER_WAIT DESC LIMIT 100;

方法六:Binary Log 審計(完整變更歷史)

mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000001 | grep -A 20 '### UPDATE'
  • 需 binlog_format=ROW。
  • 可還原完整 DML/DDL 序列,適合合規審計、誤操作回滾。

方案選型建議

需求推薦方案性能影響
開發調試、臨時排查一般查詢日誌 (TABLE 模式)中等(磁碟 I/O)
生產審計、合規留存一般查詢日誌 (FILE) + logrotate中等
效能分析、Top SQLPerformance Schema / 慢查詢日誌低(採樣/閾值)
資料變更完整追蹤Binlog (ROW) + mysqlbinlog / Canal / Maxwell低(異步複製)

注意事項

  • 一般查詢日誌**會記錄密碼明文**(如 CREATE USER ... IDENTIFIED BY),生產環境謹慎開啟或定期清理。
  • log_output=TABLE 寫入 mysql.general_log 表(CSV/InnoDB),大量寫入可能造成鎖爭用,建議改用 FILE。
  • 慢查詢日誌預設不記錄管理命令,需 log_slow_admin_statements=1。

總結

查看 SQL 歷史:**開發用 ~/.mysql_history,審計用 General Log (FILE),效能用 Slow Log + Performance Schema,資料變更追蹤用 Binlog**。根據場景選擇,避免全開導致效能下降與敏感資訊洩露。

copyright © 萬盛學電腦網 all rights reserved