Mysql運維之日志管理

一般成熟的軟件,都會有自己的日志文件。通過這些日志來快速定位問題。在mysql中,日志分為以下幾類:

  • 慢查詢日志,當sql的執行時間超過設定值時,便會記錄

  • 錯誤日志,mysql啟動、停止或運行時發生錯誤時,會記錄到錯誤日志里

  • 二進制日志,該日志記錄那些改變數據庫數據時的sql語句,通過他,我們可以來恢復Mysql數據

  • 查詢日志,當開啟時,會記錄查詢SQL。

今天我們來講講慢查詢、錯誤日志以及查詢日志,二進制日志文件,將放以后用新的一篇文章來詳細講解。

錯誤日志

錯誤日志寫記錄Mysql啟動、停止時出現的問題,另外也記錄Mysql在運行中發生的重大問題。可以使用show variables like ‘log_err%’;查看錯誤日志文件的位置。

mysql>?show?variables?like?'log_err%'; +---------------------+-------------------------------+ |?Variable_name???????|?Value?????????????????????????| +---------------------+-------------------------------+ |?log_error???????????|?./iZbp171edtq2kx5iy0xufeZ.err?| |?log_error_verbosity?|?3?????????????????????????????| +---------------------+-------------------------------+ 2?rows?in?set?(0.01?sec)

錯誤日志,默認使用主機名作為文件名,以err作為后綴名,存放在mysql目錄下的/var目錄中。如果我們想修改的話,可以修改配置文件log_error項??梢允褂孟鄬β窂交蚪^對路徑,使用相對路徑的話只會修改錯誤日志文件名,而使用絕對路徑則可以修改錯誤日志存放的位置。

錯誤日志的查看也非常簡單,直接使用cat或vim來查看即可。

通用查詢日志

通用查詢日志會記錄用戶所有的操作,所以一般占用空間較大,日常運維中一般都不會開啟,并且默認情況也是關閉該日志的。如想開啟的話,則可以在配置文件中加入log選項。

慢查詢日志

慢查詢是一個非常好的排查SQL問題工具,很多情況下,都是我們的sql導致系統運行不暢。筆者以前犯過這個錯誤,使用的一條非常復雜的查詢語句,系統剛上不舊就502了。前段時間,發現公司的老項目也是出現了相應的問題,該項目使用的dedecms,當數據量達到一定程度,就會出現大量的慢查詢,然后整個系統的cpu就跑滿了。所以,我們要經常查看慢查詢日志,找過sql的問題所在。

慢查詢配置項

  • slow-query-log={0|off|1|on} ?是否開啟慢查詢日志功能

  • slow-query-time=10 設定的閥值,單位為秒,支持浮點數。當sql的執行時間超過該值,就會記錄在慢查詢日志中。如果設置為0,則會記錄所有查詢

  • slow_query_log_file=/mydata/data/hostname-slow.log 慢查詢日志存放的位置及文件名

  • log_queries_not_using_indexes=OFF 該項表示沒有使用索引的查詢也會記錄到慢查詢日志中去。

案例

現在,我將自己的mysql的慢查詢日志打開,并且將時間設置為0,記錄所有的SQL。然后來帶大伙看看慢查詢日志是怎樣的。

Tcp?port:?3306??Unix?socket:?/tmp/mysql.sock Time?????????????????Id?Command????Argument #?Time:?2020-05-31T12:00:01.895700Z #?User@Host:?blog[blog]?@?localhost?[]??Id:?????3 #?Query_time:?0.000170??Lock_time:?0.000000?Rows_sent:?0??Rows_examined:?0 use?blog; SET?timestamp=1590926401; SET?NAMES?utf8mb4; #?Time:?2020-05-31T12:00:01.902684Z #?User@Host:?blog[blog]?@?localhost?[]??Id:?????3 #?Query_time:?0.006914??Lock_time:?0.006529?Rows_sent:?0??Rows_examined:?120 SET?timestamp=1590926401; SELECT?*?FROM?knowledge? ????????????WHERE?is_delete=0?AND?star?<p>我們主要看Query_time行</p>
  • Query_time:查詢時間

  • Lock_time:鎖表時間

  • Rows_sent:獲取的數據行

  • Rows_examined:掃描的數據行

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享