cat ~/.mysql_history
mysql 命令列工具中手工執行的語句。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
[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。
-- 啟用 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;
mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000001 | grep -A 20 '### UPDATE'
binlog_format=ROW。| 需求 | 推薦方案 | 性能影響 |
|---|---|---|
| 開發調試、臨時排查 | 一般查詢日誌 (TABLE 模式) | 中等(磁碟 I/O) |
| 生產審計、合規留存 | 一般查詢日誌 (FILE) + logrotate | 中等 |
| 效能分析、Top SQL | Performance 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**。根據場景選擇,避免全開導致效能下降與敏感資訊洩露。