在 MySQL 中,有 4 種不同的日志,分別是錯誤日志、二進制日志、查詢日志和慢查詢日志。
錯誤日志記錄了 MySQL 啟動和停止時以及服務器在運行過程中發生嚴重錯誤時的相關信息。
mysql> SHOW VARIABLES LIKE 'log_error%'; +---------------+---------------+ | Variable_name | Value | +---------------+---------------+ | log_error | .\HUEY-PC.err | +---------------+---------------+
編輯 my.ini,修改 log-error 參數:
# Error Logging. log-error="HUEY-PC.err"
錯誤文件為普通的文本文件,可直接查看。
二進制日志記錄了所有的 DDL(數據定義語言)語句和 DML(數據操縱語言)語句,但是不包括數據查詢語句。
mysql> SHOW VARIABLES LIKE 'log_bin%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin | OFF | | log_bin_basename | | | log_bin_index | | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | +---------------------------------+-------+
編輯 my.ini:
# Binary Logging. log-bin="HUEY-PC-bin"
保存 my.ini 更改,重啟 MySQL 服務。
使用 mysqlbinlog 工具來查看二進制日志的內容:
D:\ProgramData\MySQL\MySQL Server 5.6\data>mysqlbinlog HUEY-PC-bin.000001
清除所有日志(不存在主從復制關系):
mysql> RESET MASTER;
清除指定日志之前的所有日志:
mysql> PURGE MASTER LOGS TO 'HUEY-PC-bin.000005';
清除某一時間點前的所有日志:
mysql> PURGE MASTER LOGS BEFORE '2015-01-01 00:00:00';
清除 n 天前的所有日志:
mysql> PURGE MASTER LOGS BEFORE CURRENT_DATE - INTERVAL 10 DAY;
在 my.ini 中配置 expire_logs_days 參數指定二進制日志的有效天數,MySQL 會自動刪除過期的二進制日志。expire_logs_days 設置在服務器啟動或者 MySQL 切換二進制日志時生效,因此,如果二進制日志沒有增長和切換,服務器不會清除老條目。
# 二進制日志的有效天數 expire_logs_days = 5
默認情況下查詢日志是關閉的。查詢日志記錄了客戶端的所有操作,而二進制日志不記錄只查詢數據的語句。在並發環境易產生大量日志信息而導致大量磁盤 I/O,影響 MySQL 的性能,通常情況下不建議啟用查詢日志。
mysql> SHOW VARIABLES LIKE 'general_log%'; +------------------+-------------+ | Variable_name | Value | +------------------+-------------+ | general_log | ON | | general_log_file | HUEY-PC.log | +------------------+-------------+
編輯 my.ini,修改 general-log 參數為 1,同時設定 log-output 參數(日志輸出類型)和 general_log_file 參數(查詢日志路徑):
# General logging.: log-output=FILE general-log=1 general_log_file="HUEY-PC.log"
保存 my.ini 更改,重啟 MySQL 服務。
編輯 my.ini,設置 general-log 參數為 0:
# General logging. log-output=NONE general-log=0 general_log_file="HUEY-PC.log"
保存 my.ini 更改,重啟 MySQL 服務。
慢查詢日志記錄了所有執行時間超過 long_query_time 秒的 SQL 語句。
mysql> SHOW VARIABLES LIKE 'slow_query_log%'; +---------------------+------------------+ | Variable_name | Value | +---------------------+------------------+ | slow_query_log | OFF | | slow_query_log_file | HUEY-PC-slow.log | +---------------------+------------------+
編輯 my.ini,設置 slow-query-log 參數為 1,同時設定 log-output 參數(日志輸出類型)、slow-query-log_file 參數(慢查詢日志路徑)和 long_query_time 參數:
# Slow logging. log-output=FILE slow-query-log=1 slow_query_log_file="HUEY-PC-slow.log" long_query_time=10
保存 my.ini 更改,重啟 MySQL 服務。
編輯 my.ini,設置 slow-query-log 參數為 0:
# Slow logging. log-output=NONE slow-query-log=0 slow_query_log_file="HUEY-PC-slow.log" long_query_time=10