1. 程式人生 > >mysql系列詳解三:mysql中各類日誌詳解-技術流ken

mysql系列詳解三:mysql中各類日誌詳解-技術流ken

1.前言

日誌檔案記錄了MySQL資料庫的各種型別的活動,MySQL資料庫中常見的日誌檔案有 查詢日誌,慢查詢日誌,錯誤日誌,二進位制日誌,中繼日誌 。下面分別對他們進行介紹。

 

2.查詢日誌

 

1.檢視查詢日誌變數

查詢日誌即檢視日誌記錄了所有對 MySQL 資料庫請求的資訊,不論這些請求是否得到了正確的執行。預設為 主機名.log

mysql> show global variables like "%gen%log%";
+------------------+------------------------------------+
| Variable_name    | Value                              |
+------------------+------------------------------------+
| general_log      | OFF                                |
| general_log_file | /data/mysql/mysql3306/data/ken.log |
+------------------+------------------------------------+
2
rows in set (0.00 sec)

 

2.查詢日誌變數詳解

1 log on|off:                 指定是否記錄查詢日誌     <<< mysql5.6開始就棄用該選項
2 general_log:                指定是否記錄查詢日誌
3 log_output none|table|file: 指定將記錄到的查詢儲存到什麼位置
4 file:                       儲存成一個檔案
5 table:                      儲存成一張表
6 none:                       不記錄
7 general_log_file: 指定將查詢日誌儲存成哪個檔案、叫什麼名

 

2.慢查詢日誌

 

1.檢視慢查詢日誌變數

慢查詢日誌用來記錄響應時間超過閾值的SQL語句,所以我們可以設定一個閾值,將執行時間超過該值的所有SQL語句都記錄到慢查詢日誌檔案中。該閾值可以通過引數 slow_launch_time來設定,預設為2秒。

 1 mysql> show global variables like "%slow%";
 2 +---------------------------+----------+
 3
| Variable_name | Value | 4 +---------------------------+----------+ 5 | log_slow_admin_statements | OFF | 6 | log_slow_slave_statements | ON | 7 | slow_launch_time | 2 | 8 | slow_query_log | ON | 9 | slow_query_log_file | slow.log | 10 +---------------------------+----------+ 11 5 rows in set (0.00 sec)

 

2.慢查詢日誌變數詳解

1 slow_query_log on|off:  指定是否啟用慢查詢日誌
2 slow_query_log_file:    指定慢查詢日誌檔案
3 slow_launch_time:       指定在多長時間內沒有執行完額查詢是慢查詢
4 log_output:             指定將記錄到的查詢儲存到什麼位置

 

3.錯誤日誌

 

1.檢視錯誤日誌變數

錯誤日誌檔案對MySQL的啟動,執行,關閉過程進行了記錄。

 1 mysql> show global variables like "%error%";
 2 +---------------------+--------------+
 3 | Variable_name       | Value        |
 4 +---------------------+--------------+
 5 | binlog_error_action | ABORT_SERVER |
 6 | log_error           | ./error.log  |
 7 | log_error_verbosity | 3            |
 8 | max_connect_errors  | 100000       |
 9 | max_error_count     | 64           |
10 | slave_skip_errors   | OFF          |
11 +---------------------+--------------+
12 6 rows in set (0.00 sec)

 

2.錯誤日誌變數詳解

1 log_error:        指定錯誤日誌的檔案及其路徑
2 log_warnings:     指定將哪個級別的警告日誌記錄到錯誤日誌中
3 sql_warnings:     指定是否記錄在執行sql語句時候所觸發的經過資訊

 

 

4.二進位制日誌

 

1.關於二進位制日誌以及二進位制日誌變數

二進位制日誌記錄了對資料庫執行更改的所有操作,但是不包括 select 和 show 這類操作,因為這類操作對資料本身並沒有修改,如果你還想記錄select和show操作,那隻能使用查詢日誌了,而不是二進位制日誌。

此外,二進位制還包括了執行資料庫更改操作的時間和執行時間等資訊。 二進位制日誌主要有以下幾種作用 :

  • 恢復(recovery) : 某些資料的恢復需要二進位制日誌,如當一個數據庫全備檔案恢復後,我們可以通過二進位制的日誌進行 point-in-time 的恢復
  • 複製(replication) : 通過複製和執行二進位制日誌使得一臺遠端的 MySQL 資料庫(一般是slave 或者 standby) 與一臺MySQL資料庫(一般為master或者primary) 進行實時同步
  • 審計(audit) :使用者可以通過二進位制日誌中的資訊來進行審計,判斷是否有對資料庫進行注入攻擊

 

 1 mysql> show global variables like "%bin%";
 2 +--------------------------------------------+--------------------------------------------+
 3 | Variable_name                              | Value                                      |
 4 +--------------------------------------------+--------------------------------------------+
 5 | bind_address                               | *                                          |
 6 | binlog_cache_size                          | 1048576                                    |
 7 | binlog_checksum                            | CRC32                                      |
 8 | binlog_direct_non_transactional_updates    | OFF                                        |
 9 | binlog_error_action                        | ABORT_SERVER                               |
10 | binlog_format                              | ROW                                        |
11 | binlog_group_commit_sync_delay             | 0                                          |
12 | binlog_group_commit_sync_no_delay_count    | 0         
...

 

2.二進位制日誌變數詳解

 1 log_bin on|off:                         也是指定是否啟用二進位制日誌(全域性的)
 2 log_bin_basename /path/to/binlog:       指定二進位制日誌的檔案的基名
 3 log_bin_index /path/to/binlog.index:    指定二進位制日誌檔案的索引檔案
 4 binlog_format row|mixex|statement:      指定基於那種方式進行記錄
 5 sync_binlog #:                          指定隔多久將快取中的資訊重新整理到二進位制日誌檔案中。
 6                                       -->每次提交事務,會將快取中的記憶體重新整理到二進位制日誌檔案中。
 7                                       -->預設每個sql語句是一個事務,而且預設事務會自動提交,所以,預設的效能很差
 8 max_binlog_size #:                      指定二進位制日誌檔案的上限,超過上限回滾動
 9 max_binlog_cache_size  #:               指定二進位制日誌快取空間大小,空間被填滿,會自動滾動
10 sql_log_off on|off:                     是否將一般的查詢操作記錄到二進位制日誌中
11 sql_log_bin on|off:                     也是指定是否啟用二進位制日誌(會話級別)
12 log_bin_trust_function_creators on|off: 指定是否允許建立可能導致不安全的函式

 

 3.檢視二進位制日誌檔案

對於二進位制日誌檔案來說,不像錯誤日誌檔案,慢查詢日誌檔案那樣用cat,vim等命令可以檢視,它需要通過 MySQL 提供的工具 mysqlbinlog

 1 [[email protected] ~]# mysqlbinlog /data/mysql/mysql3306/logs/mysql-bin.000001 
 2 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
 3 /*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
 4 DELIMITER /*!*/;
 5 # at 4
 6 #181012  0:34:24 server id 1003306  end_log_pos 123 CRC32 0x27fde4a9     Start: binlog v 4, server v 5.7.23-log created 181012  0:34:24 at startup
 7 ROLLBACK/*!*/;
 8 BINLOG '
 9 kHu/Ww8qTw8AdwAAAHsAAAAAAAQANS43LjIzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
10 AAAAAAAAAAAAAAAAAACQe79bEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
11 Aank/Sc=
12 '/*!*/;
13 # at 123
14 #181012  0:34:24 server id 1003306  end_log_pos 154 CRC32 0x4e3fc05f     Previous-GTIDs
15 # [empty]
16 # at 154
17 #181012  0:34:26 server id 1003306  end_log_pos 177 CRC32 0x368d3215     Stop
18 SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
19 DELIMITER ;
20 # End of log file
21 /*!50003 SET [email protected]_COMPLETION_TYPE*/;
22 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

 

5.中繼日誌

 

1.檢視中繼日誌日誌變數

用於實現mysql的主從複製

 

 1 mysql> show global variables like "%relay%";
 2 +---------------------------+--------------------------------------------+
 3 | Variable_name             | Value                                      |
 4 +---------------------------+--------------------------------------------+
 5 | max_relay_log_size        | 134217728                                  |
 6 | relay_log                 | relay-bin                                  |
 7 | relay_log_basename        | /data/mysql/mysql3306/data/relay-bin       |
 8 | relay_log_index           | /data/mysql/mysql3306/data/relay-bin.index |
 9 | relay_log_info_file       | relay-log.info                             |
10 | relay_log_info_repository | FILE                                       |
11 | relay_log_purge           | ON                                         |
12 | relay_log_recovery        | ON                                         |
13 | relay_log_space_limit     | 0                                          |
14 | sync_relay_log            | 10000                                      |
15 | sync_relay_log_info       | 10000                                      |
16 +---------------------------+--------------------------------------------+
17 11 rows in set (0.00 sec)

 

 

2.二進位制日誌變數詳解

1 relay_log fileName:       指定中繼日誌的檔名。【檔名為空,表示禁用了中繼日誌】
2 relay_log_index:          索引表
3 relay_log_info_file:      記錄中繼日誌檔案的相關資訊
4 relay_log_purge:          指定是否自動刪除無用的中繼日誌檔案
5 relay_log_recovery:       是否可以對中繼日誌做自動恢復相關的配置
6 relay_log_space_limit:    指定中繼日誌可以佔用的空間大小(0表示不限制)

 

 3.SQL執行緒應用中繼日誌流程