MySQL的四種日志


在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM