在MySQL中,有4種不同的日志,分別是錯誤日志、二進制日志(BINLOG日志)、查詢日志和慢查詢日志
錯誤日志
錯誤日志記錄了MySQL在啟動、停止、以及服務器在運行過程中發生任何嚴重錯誤的相關信息。
該日志是默認開啟的,查看錯誤日志的位置
mysql> show variables like 'log_error%';
+----------------------------+----------------------------------------+
| Variable_name | Value |
+----------------------------+----------------------------------------+
| log_error | .\XIEJINCHI.err |
| log_error_services | log_filter_internal; log_sink_internal |
| log_error_suppression_list | |
| log_error_verbosity | 2 |
+----------------------------+----------------------------------------+
4 rows in set, 1 warning (0.06 sec)
二進制日志
二進制日志(BINLOG日志)記錄了所有DDL(數據庫定義語言)語句和DML(數據操縱語言)語句,但是不包括查詢語句,此日志對於災難時的數據恢復有非常重要的作用,MySQL的主從復制,就是通過該日志實現的
二進制日志默認情況下是沒有開啟的,需要到MySQL的配置文件中開啟,並配置MySQL日志的格式
查看binlog日志是否開啟
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 |
| sql_log_bin | ON |
+---------------------------------+-------+
6 rows in set (0.00 sec)
開啟binlog,如果沒有指定日志文件的路徑,默認寫入MySQL的數據目錄
#文件名
log-bin=mysql-bin
#序列號
server-id=1
#日志格式
binlog_format=STATEMENT
在 MySQL 5.7.3 及以后版本,如果沒有設置server-id, 那么設置binlog后無法開啟MySQL服務
日志格式
STATEMENT
這個格式的日志文件中記錄的都是SQL語句,每一條對數據進行修改的SQL都會記錄在日志文件中,通過MySQL提供的mysqlbinlog工具,可以清晰的查看到每一條語句的文本,主從復制的時候,從庫(slave)會將日志解析為原文本,並在從庫重新執行一次
ROW
這個格式的日志文件記錄的是每一行數據的變更,而不是SQL語句
MIXED
這個是目前MySQL默認的日志格式,混合了STATEMENT和ROW兩種格式,默認情況下使用STATEMENT,但是在一些特殊情況下采用ROW來進行記錄。MIXED格式能盡量利用兩種模式的優點,而避開它們的缺點。
查看binlog日志
查看日志文件存放的位置
mysql> show variables like '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/mysql-bin |
| log_bin_index | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+--------------------------------+
6 rows in set (0.00 sec)
mysql-bin.index:是日志的索引文件,記錄日志的文件名
mysql-bin:是日志文件
查看binlog文件列表 show binary logs;
查看binlog文件內容 show binlog events in 'mysql-bin.000001';
binlog日志的刪除
對於比較繁忙的系統,由於每天生成大量的日志,這些日志如果長時間不清除,就會占用大量的磁盤空間
刪除方式一:通過 Reset Master 指令刪除全部日志,日志編號重新開始
mysql> reset master;
Query OK, 0 rows affected (0.00 sec)
刪除方式二:刪除指定編號之前的日志文件,比如刪除mysql-bin.000001之前的文件
mysql> purge master logs to 'mysql-bin.000001';
Query OK, 0 rows affected (0.00 sec)
刪除方式三:刪除某個時間點之前的日志
mysql> purge master logs before '2021-10-19 00:00:00 ';
Query OK, 0 rows affected, 1 warning (0.01 sec)
刪除方式四:設置日志的過期時間,單位為天,到期自動刪除日志
查看binlog的過期時間
mysql> show variables like "%expire_logs%";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+
1 row in set (0.01 sec)
0 表示永不過期
修改MySQL配置文件,設置binlog過期時間,然后重啟MySQL
expire_logs_days=15
#達到過期時間並不會立即刪掉,binlog大小超過max_binlog_size才會刪掉
max_binlog_size=500M
查詢日志
查詢日志中記錄了客戶端所有操作語句,包括select語句
查看查詢日志是否開啟,OFF表示未開啟
mysql> show variables like "general_log%";
+------------------+---------------------------------+
| Variable_name | Value |
+------------------+---------------------------------+
| general_log | OFF |
| general_log_file | /var/lib/mysql/d6e04edbfb09.log |
+------------------+---------------------------------+
2 rows in set (0.00 sec)
查詢日志默認是未開啟的,可以修改MySQL配置文件來開啟
#開啟查詢日志,1-開啟,0-關閉
general-log=1
#設置日志的文件名,默認的文件名為host_name.log
general_log_file=/var/log/mysql/general_log.log
慢查詢日志
MySQL默認10s內沒有響應SQL結果,則為慢查詢
可以修改這個默認時間
慢查詢日志默認是關閉的,修改MySQL配置文件,來開啟慢查詢日志
#開啟慢查詢日志,0-關閉,1-開啟
slow_query_log=1
#指定慢查詢日志的文件名
slow_query_log_file=/var/log/mysql/slow_query.log
#查詢超過這個時間就記錄為慢查詢,單位是秒
long_query_time=3