1. 程式人生 > >MySQL-07 日誌管理

MySQL-07 日誌管理

mysql- 執行時間 改善 days exp 日誌恢復 查詢 連接 結束時間

學習目標

  • MySQL日誌
  • 二進制日誌
  • 錯誤日誌
  • 查詢通用日誌
  • 慢查詢日誌

MySQL日誌

MySQL日誌分為四類,說明如下:

  • 錯誤日誌:記錄MySQL服務的啟動、運行或者停止時出現的問題。
  • 查詢日誌:記錄客戶端連接和執行的語句。
  • 二進制日誌:記錄所有更改數據的語句,可以用於數據復制。
  • 慢查詢日誌:記錄所有執行時間超過long_query_time的所有查詢或者不使用索引的查詢。

刷新日誌的命令:FLUSH LOGS、MySQLAdmin flush-logs、MySQLAdmin refresh。

啟用日誌功能會降低MySQL數據庫的性能和占用磁盤空間。

二進制日誌

二進制日誌是一個二進制文件,主要用於記錄修改數據或有可能引起數據變更(例如沒有匹配刪除條件的DELETE語句)的MySQL語句,以事務安全的方式包含更新日誌中可用的所有信息。

二進制日誌中記錄了對MySQL數據庫執行更改的所有操作,並且記錄了語句發生時間、執行時長、操作數據等其它額外信息,但是它不記錄SELECT、SHOW等那些不修改數據的SQL語句。如果記錄所有語句,使用查詢日誌。

二進制日誌主要要用於數據庫恢復和主從復制,以及審計(audit)操作。

啟動和設置二進制日誌

在my.ini配置文件的[mysqld]節點添加以下配置信息:

[mysqld]
port = 3306

; 服務端使用的字符集默認為8比特編碼的latin1字符集
character-set-server=utf8
; 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB

; 二進制日誌設置開始
; 開啟二進制日誌
log-bin
; 自動清除10天過期日誌。MySQL服務重啟或者日誌刷新時候將被刪除。
expire-logs-days=10
; 單個日誌文件大小
max_binlog_size=100M
;二進制日誌設置結束

  

添加完成後,關閉並重啟MySQL服務進程,即可打開和查看二進制日誌。

確認二進制日誌已經打開:

技術分享圖片

在mysql的data數據目錄下,生成以主機名稱作為文件名的日誌文件:

技術分享圖片

如果需要修改二進制日誌文件的存儲位置和名稱,則修改my.ini配置文件中log-bin的值:

例如:

log-bin="D:/logs/binlog"

  

重啟mysql服務後,日誌將保存在“D:/logs”目錄中,並且文件名為“binlog”。

查看二進制日誌

MySQL服務每重啟一次(或者執行SQL命令FLUSH LOGS),以後綴名為.00000*的文件會增加一個;或者日誌文件的的大小超過max_bin_log設置的大小(默認1G),也會重新創建一個新文件。

技術分享圖片

示例1:在MySQL中查看日誌文件個數和文件名:

技術分享圖片

示例2:查看二進制日誌

在命令行中,使用mysqlbinlog命令工具查看。

mysqlbinlog需要添加參數“-v”,否則無法看到SQL語句。

技術分享圖片

二進制日誌格式

  • 基於行的格式row

技術分享圖片

由於ROW格式記錄的日誌量巨大, 在MySQL 5.6以後, 官方增加了binlog_row_image參數改善其記錄方式。

技術分享圖片

value值:

FULL為默認值,意思是記錄一行紀錄裏面的所有內容,無論該列是否被修改。

MINIMAL僅記錄被修改的列,這樣就可以大大減少記錄量。

NOBLOB與FULL類型,但是如果沒有修改BLOB或TEXT類型的列,就不會記錄該大數據類型的列。

  • 基於段的格式statement

技術分享圖片

優點:記錄每個事件所執行的SQL語句, 故不需要記錄每一行的具體變化, 所以日誌記錄量相對較少, 節約磁盤IO與網絡IO(如果只對一條記錄修改或者插入,ROW格式的日誌量有可能少於STATEMENT格式)。

缺點:為了確保這些SQL語句能在從庫中正確地執行, 所以要記錄上下文信息, 以保證重放時的行為一致. 但如果使用UUID()這類非確定性函數, 可能會造成主從的數據不一致.

格式設置:

技術分享圖片

刪除二進制日誌

示例1:刪除全部二進制文件

技術分享圖片

示例2:刪除創建時間比RASK-PC-bin.000005的日誌文件

刪除前日誌文件:

技術分享圖片

或者:

技術分享圖片

執行刪除部分日誌命令:

技術分享圖片

暫時啟動和停止二進制日誌功能

啟動

技術分享圖片

停止

技術分享圖片

使用二進制日誌恢復數據庫

mysqlbinlog工具可以從指定的時間點開始恢復數據。

mysqlbinlog恢復數據語法格式:

mysqlbinlog [option] filename | mysql -uUser -pPassword

  

option可選項:

--start-datetime:指定恢復數據庫的起始時間點。

--stop-datetime:指定恢復數據庫的結束時間點。

--start-position:恢復的開始位置(日誌中的位置)。

--stop-position:恢復的結束位置。

示例1:全部恢復

技術分享圖片

示例2:恢復到2018年6月17日10:30:00時的狀態

技術分享圖片

錯誤日誌

錯誤日誌默認位於data目錄下,文件名為:hostname.err。例如:

技術分享圖片

如果需要修改默認文件存儲路徑和文件名,需要在my.ini配置文件的[mysqld]節點添加以下信息:

log-error=[path/[filename]]

查看日誌文件

直接使用文本工具查看。

刪除日誌文件

可以直接刪除文本日誌文件。MySQL在運行時,刪除錯誤日誌文件不會自動創建新的日誌文件,需要在服務器端執行:

mysqladmin -u root -pPassword flush-logs

  

或者在mysql中執行

FLUSH LOGS

  

MySQL重啟會重新創建日誌文件。

通用查詢日誌

通用查詢日誌記錄了MySQL的所有用戶操作,包括啟動和關閉服務、執行查詢和更新語句。

啟動和設置通用查詢日誌

5.7之前的版本

在my.ini配置文件[mysqld]節點下添加:

log[=path/[filename]]

例如:

; 開啟通用查詢日誌
log

  

5.7版本

; 開啟通用查詢日誌
general-log=1
general_log_file="D:/mysql.log"

  

如果不指定general_log_file,則查詢日誌保存在data目錄下,文件名:hostname.log。

查看通用查詢日誌

使用記事本查看

技術分享圖片

刪除和重建通用查詢日誌

通過my.ini配置文件找到查詢日誌存儲位置,直接在文件管理系統中刪除。

重建通用查詢日誌命令:

mysqladmin -flush logs

  

慢查詢日誌

慢查詢日誌記錄查詢時長超過指定時間的日誌。通過慢查詢日誌,可以找出執行時間較長、執行效率較低的語句,然後針對其進行優化。

啟動和設置慢查詢日誌

在my.ini配置文件[mysqld]節點下添加慢查詢日誌配置:

5.6和之前版本:

; 開啟慢查詢日誌
log-slow-queries
; 設置查詢時長閥值為20秒(默認10秒)
long_query_time=20

  

5.7版本:

slow_query_log=ON
; 設置慢查詢日誌存儲位置
slow_query_log_file=‘d:/msql_slow‘
; 設置超時,默認為10秒
long_query_time=20

  

slow_query_log_file不進行設置,則日誌存儲在data目錄下,默認文件名為hostname-slow.log,例如:

技術分享圖片

查看慢查詢日誌

使用文本工具直接查看日誌文件即可。

刪除慢查詢日誌

直接使用文件系統刪除。刪除後無法自動創建,需要執行mysqladmin命令或者登陸到mysql服務器執行刷新日誌命令:

# 系統命令
mysqladmin -u User -pPassword flush-logs

# mysql執行語句
FLUSH LOGS;

  

綜合練習

練習一:二進制日誌綜合練習:

  1. 啟動二進制日誌,指定二進制日誌名稱為binlog,日誌存儲位置為D:/logs
  2. 驗證重啟mysql和FLUSH LOGS執行語句對二進制日誌的影響
  3. 使用mysqlbinlog命令查看二進制日誌文件
  4. 使用二進制日誌文件恢復數據:創建測試表T1(id,name),向數據表插入兩條記錄,查看日誌文件,找出日誌文件記錄的SQL語句;刪除T1表,使用mysqlbinlog命令恢復T1表
  5. 刪除二進制日誌文件。暫停和啟動二進制日誌文件。

練習二:錯誤日誌綜合練習

  1. 設置和啟動錯誤日誌文件,指定錯誤日誌文件名稱為errlog,日誌存儲位置為D:/logs
  2. 使用記事本查看錯誤日誌文件
  3. 刪除錯誤日誌文件
  4. 重新創建日誌文件

練習三:通用查詢日誌綜合練習

  1. 設置和啟動通用查詢日誌文件,指定通用查詢日誌文件名稱為general_query_log,日誌存儲位置為D:/logs
  2. 查看通用查詢日誌
  3. 刪除通用查詢日誌

練習四:慢查詢日誌綜合練習

  1. 設置和啟動慢查詢日誌文件,指定慢查詢日誌文件名稱為slow_query_log,日誌存儲位置為D:/logs
  2. 查看慢查詢日誌文件
  3. 刪除慢查詢日誌文件

MySQL-07 日誌管理