一、錯誤日誌 錯誤日誌是MySQL中最重要的日誌之一,它記錄了當MySQL啟動和停止時,以及伺服器在運行過程中發生的任何嚴重錯誤時的相關信息,當資料庫出現任何故障導致無法正常使用時,建議首先查看此日誌 錯誤日誌預設是開啟的,預設存在目錄/var/log/,預設的日誌文件名為mysqld.log, 但 ...
一、錯誤日誌
錯誤日誌是MySQL中最重要的日誌之一,它記錄了當MySQL啟動和停止時,以及伺服器在運行過程中發生的任何嚴重錯誤時的相關信息,當資料庫出現任何故障導致無法正常使用時,建議首先查看此日誌
錯誤日誌預設是開啟的,預設存在目錄/var/log/,預設的日誌文件名為mysqld.log, 但是這些都是可以配置的,可以通過指令查看日誌位置:show variables like ''%log_error%
說明1:我的這裡錯誤日誌就不是預設路徑也不是預設名稱,但是沒關係,根據這個變數查詢的結果查詢就可以了。
二、二進位日誌
2.1 二進位日誌(binlog)
記錄了所有的DDL(數據定義語言)語句和DML(數據操作語言)語句,但不包括數據查詢(select,show)等語句
2.2 作用
-
- 災難時的數據恢復
- MySQL的主從賦值,在MySQL8版本中,預設的二進位日誌是開啟的
- 通過 show variables like "%log_bin%" 可以查看具體的日誌位置
2.3 日誌格式
MySQL伺服器中提供了多種格式來記錄二進位日誌,具體格式及特點如下:
STATEMENT:基於SQL語句的日誌記錄,記錄的是SQL語句,對數據進行修改的SQL都會記錄在日誌文件中
ROW:基於行的日誌記錄,記錄的是每一行的數據變更。 (預設)
MIXED:混合了STATEMENT 和 ROW 兩種格式,預設採用STATEMENT, 在某些特殊情況下會自動切換為ROW進行記錄
通過 show variables like "%binlog_format%"; 可以查看
2.4 修改日誌格式
要修改日誌格式,需要在MySQL的配置文件設置 binlog_format = "XXXX",然後重啟MySQL即可
重啟MySQL
修改成功
2.5 日誌查看
由於日誌是以二進位方式存儲的,不能直接讀取,需要通過二進位日誌查詢工具 mysqlbinlog 來查看,
具體語法:mysqlbinlog [options] logfilename
options選項
-d:指定數據名稱,只列出指定的數據相關操作
-0:忽略掉日誌中的前n行命令
-v:將行事件(數據變更)重構為SQL語句
-vv:將行事件(數據變更)重構為SQL語句,並輸出註釋信息
2.6 基於ROW的binlog示例
說明1:預設 binlog_fromat為 ROW 模式的情況下 我們查看binlog日誌的時候要加上 -v參數即:mysqlbinlog -v binlog.000033
說明2:基於ROW類型的binlog日誌是,記錄的每一行的變化。
2.7 基於STATEMENT的binlog示例
說明1:同樣再次修改age數據
說明2:基於STATEMENT類型的binlog日誌,記錄的SQL語句的變化而不是,每一行的變化
2.8 日誌刪除
對於比較繁忙的業務系統,每天生成的binlog數據巨大,如果長時間不清楚,將會占用大量磁碟空間,可以通過一下幾種方式清理日誌
-
- reset master :刪除全部binlog日誌,刪除之後,日誌編號,將重新從binlog.000001開始
- purge master logs to 'binlog.xxxxxx':刪除xxxxxx編號之前的所有日誌
- purge master logs before 'yyyy-mm-dd HH:MM:SS':刪除日誌 'yyyy-mm-dd HH:MM:SS'之前產生的所有日誌
- 也可以在MySQL的配置文件中配置二進位日誌的過期時間,設置了之後,二進位日期過期會自動刪除:show variables like "%binlog_expire_logs_seconds%"; 可以查看
示例:
說明1:刪除binlog.000030編號以前的日誌
說明2:按照時間點刪除
說明3:binlog的過期時間單位是秒,預設是30天
三、查詢日誌
查詢日誌中記錄了客戶端的所有操作語句,而二進位日誌不包含查詢數據的SQL語句,預設情況下,查詢日誌是未開啟的,如果需要開啟查詢日誌,可以設置一下配置
說明1:general_log 預設是關閉的,可以通過修改MySQL配置文件配置。
說明2:修改好了配置文件要重啟MySQL才會生效
說明3:對資料庫進行資料庫查詢,表查詢,數據更改等操作
說明4:剛纔的操作都在查詢日誌中可以找到。
說明5:因為該日誌記錄的內容比較多,在比較繁忙的系統中可以不用啟動該日誌。
四、慢查詢日誌
慢查詢日誌記錄了所有執行時間查過參數long_query_time設置值並且掃描記錄數不小於min_examined_row_limit的所有的SQL語句的日誌。long_query_time預設為10秒,最小為0,精度可以到微秒
通過MySQL配置文件可以配置是否開啟,配置後重啟MySQL即可生效
說明1:預設是關閉的
說明2:修改配置文件 ,然後重啟MySQL
說明3:慢查詢啟動成功
說明4:這次查詢耗時4.02秒
說明5:然後打開慢查詢日誌就可以查看到這裡查詢的情況,通過慢查詢日誌,我們主要是可以定位到那條語句執行比較慢,方便我們做精準的SQL優化
侯哥語錄:我曾經是一個職業教育者,現在是一個自由開發者。我希望我的分享可以和更多人一起進步。分享一段我喜歡的話給大家:"我所理解的自由不是想乾什麼就乾什麼,而是想不幹什麼就不幹什麼。當你還沒有能力說不得時候,就努力讓自己變得強大,擁有說不得權利。"