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

MySQL 日志體系核心命令速查:錯誤、查詢、慢查詢、事務、二進制日志操作與恢復實戰

     編輯:MySQL 綜合教學

五大日志類型速覽

日志類型核心作用默認狀態關鍵配置
錯誤日志啟動/關閉、錯誤堆棧、事件調度器、從庫線程強制開啟,不可關閉log_error, log_warnings
查詢日志所有客戶端操作(含增刪改查)關閉general_log, general_log_file, log_output
慢查詢日志超時 SQL 定位性能瓶頸關閉slow_query_log, long_query_time, log_queries_not_using_indexes
事務日志InnoDB Redo Log,WAL 機制保證持久性強制開啟innodb_log_file_size, innodb_log_files_in_group, innodb_flush_log_at_trx_commit
二進制日志主從同步、時間點恢復、審計關閉log_bin, binlog_format, sync_binlog, expire_logs_days

錯誤日志:定位故障的第一現場


# 查看配置
SHOW VARIABLES LIKE 'log_error';  -- /var/log/mysql/error.log

# 實時尾部追蹤
tail -f /var/log/mysql/error.log

# 5.5.7+ 手動輪轉(舊版本用 mysqladmin flush-logs)
mv error.log error.log.old
mysqladmin flush-logs

二進制日志:核心操作與恢復實戰

查看與定位


SHOW MASTER LOGS;                    -- 列表
SHOW MASTER STATUS;                  -- 當前寫入位置
SHOW BINLOG EVENTS [IN 'file'] [FROM pos] [LIMIT n];  -- 解析事件

mysqlbinlog 命令行工具


# 查看文本
mysqlbinlog mysql-bin.000001 | head -50

# 導出 SQL
mysqlbinlog mysql-bin.000001 > /tmp/replay.sql

# 時間點恢復(生產慎用,需精確位置)
mysqlbinlog --start-datetime="2024-01-01 10:00:00" --stop-datetime="2024-01-01 10:30:00" mysql-bin.000001 | mysql -uroot -p

# 位置恢復(推薦,精確可控)
mysqlbinlog --start-position=12345 --stop-position=67890 mysql-bin.000001 | mysql -uroot -p

Binlog 格式選擇

格式特點適用場景
STATEMENT記錄 SQL 文本,體積小確定性函數、簡單更新
ROW記錄行變更,體積大,精確非確定性函數、複雜更新、主從一致性要求高
MIXED (推薦)自動判斷,兼顧效能與正確性**生產默認選擇**

關鍵持久化參數

  • sync_binlog=1:每次提交 fsync,**零資料丟失**,效能犧牲可接受(配合 RAID/BBU)。
  • expire_logs_days=7:自動清理舊日誌,防磁盤爆滿。
  • max_binlog_size=1G:單文件上限,超過自動切割。

清理與維護命令


# 按文件清理(保留指定文件及之後)
PURGE BINARY LOGS TO 'mysql-bin.000010';

# 按時間清理(保留指定時間及之後)
PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';

# 重置所有 Binlog(極度危險,僅初始化新實例使用)
RESET MASTER;

慢查詢日誌:性能調優的金礦


# 開啟並設置閾值
SET GLOBAL slow_query_log=1;
SET GLOBAL long_query_time=1;          -- 1 秒,可微秒級
SET GLOBAL log_queries_not_using_indexes=ON;  -- 記錄未用索引查詢

# 分析神器
pt-query-digest /var/log/mysql/slow.log --limit 20 --filter '$event->{fingerprint} !~ /^SET/'

# 輸出 Top 20 慢查詢報告,含執行次數、總耗時、平均耗時、掃描行數、索引使用情況

事務日志:InnoDB 核心參數


SHOW VARIABLES LIKE 'innodb_log_%';
-- innodb_log_file_size=512M (單文件)
-- innodb_log_files_in_group=2 (文件組數量)
-- innodb_log_group_home_dir=./ (目錄)
-- innodb_flush_log_at_trx_commit=1 (1=每提交刷盤, 2=每秒刷盤, 0=OS決定)

建議:innodb_log_file_size 設為 Buffer Pool 的 1/4 ~ 1/2(如 4GB BP → 1GB Log File),減少 Checkpoint 刷盤頻率。

日志輸出目標控制


SET GLOBAL log_output='FILE,TABLE';  -- 同時寫文件與 mysql.general_log/slow_log 表
SET GLOBAL log_output='NONE';        -- 開啟功能但不記錄(調試用)

總結:日志運維核心清單

  1. **錯誤日志**永久保留,接入日志平台(ELK/Loki)告警關鍵字。
  2. **慢查詢日誌**全量開啟,long_query_time=1,定期 pt-query-digest 分析。
  3. **二進制日誌**生產強制開啟,MIXED + sync_binlog=1 + expire_logs_days=7。
  4. **事務日誌**根據 BP 大小調整 innodb_log_file_size,innodb_flush_log_at_trx_commit=1。
  5. **查詢日誌**僅調試臨時開啟,**嚴禁生產長期開啟**(IO 暴增)。
  6. 建立 **Binlog 位置備份機制**(每日導出 SHOW MASTER STATUS),支撐精準時間點恢復。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved