MySQL8.0的錯誤日誌

使用MySQL的時候,會常常涉及幾個日誌,例如二進制日誌、慢查詢日誌、REDO日誌、UNDO日誌、錯誤日誌以及通用日誌。每種日誌都有本身的用處和用法,建議平常使用中根據須要,選擇開啓不一樣的日誌。
html

今天在這裏主要介紹一下MySQL8.0裏對錯誤日誌的改進。MySQL8.0的錯誤日誌能夠理解爲一個全新的日誌,在這個版本里,接受了來自社區的普遍批評意見,在這些意見和建議的基礎上生成了新的日誌。
mysql

下面這些是來自社區的意見:sql

  • 默認狀況下內容過於冗長json

  • 遺漏了有用的信息服務器

  • 難以過濾某些信息微信

  • 沒有標識錯誤信息的子系統源架構

  • 沒有錯誤代碼,解析消息須要識別錯誤app

  • 引導消息可能會丟失spa

  • 固定格式.net

針對這些意見,MySQL作了以下改變:

  • 採用組件架構,經過不一樣的組件執行日誌的寫入和過濾功能

  • 寫入錯誤日誌的所有信息都具備惟一的錯誤代碼從10000開始

  • 增長了一個新的消息分類《system》用於在錯誤日誌中始終可見的非錯誤但服務器狀態更改事件的消息

  • 增長了額外的附加信息,例如關機時的版本信息,誰發起的關機等等

  • 兩種過濾方式,Internal和Dragnet

  • 三種寫入形式,經典、JSON和syseventlog

這些新功能徹底知足了廣大用戶所提出的要求,接下來將會具體說明相關功能。

組件架構:包括寫入和過濾兩大類,從可用組件中選取適用部分激活使用。

過濾方式:包括Internal和Dragnet。Internal方式通變量來控制日誌的內容和詳細級別。兩個變量爲log_error_verbosity和

log-error-suppression-list。log_error_verbosity的值爲1,2,3分別對應

ERROR, WARNING, INFORMATION的組合,默認爲2,既ERROR+WARNING。

log-error-suppression-list對應各類錯誤代碼,不但願在日誌裏面顯示的相關信息,能夠經過設定相關的錯誤代碼來控制。例如:「-SET PERSIST  log_error_suppression_list=‘ER_PARSER_TRACE, MY-010001,10002’」

Dragnet方式則更加靈活,相似於編寫腳本,用戶能夠根據須要自行編寫規則,每條規則是一個IF語句以"."結束,能夠包含多條規則。例如:「SET GLOBAL dragnet.log_error_filter_rules =  'IF prio>=INFORMATION THEN drop. IF EXISTS source_line THEN unset source_line.';」

詳細的語法內容能夠參照在線手冊:「https://dev.mysql.com/doc/refman/8.0/en/error-log-rule-based-filtering.html」

寫入方式和輸出格式:

默認的方式:將日誌寫入文件,輸出格式爲:timestamp thread_id [priority] [err_code] [subsystem] message

JSON方式:須要安裝組件「INSTALL COMPONENT 'file://component_log_sink_json';」並在服務中添加「SET GLOBAL log_error_services = 'log_filter_internal; log_sink_json';」輸出的格式爲:
{  "prio": 3,  "err_code": 10051,  "source_line": 533,  "source_file": "event_scheduler.cc",  "function": "run",  "msg": "Event Scheduler: scheduler thread started with id 5",  "time": "2020-03-19T12:30:20.297184Z",  "ts": 1584621317167,  "thread": 5,  "err_symbol": "ER_SCHEDULER_STARTED",  "SQL_state": "HY000",  "subsystem": "Server",  "buffered": 1584621020297184,  "label": "Note"}

系統日誌方式:容許mysqld將日誌寫入Windows的event log或類UNIX系統的syslog。一樣須要安裝組件和加載服務:INSTALL COMPONENT 'file://component_log_sink_syseventlog';SET GLOBAL log_error_services = 'log_filter_internal; log_sink_syseventlog';輸出的格式與對應的系統日誌格式相同。

關於錯誤日誌的介紹內容到此爲止,更爲詳細的信息請訪問官網「https://dev.mysql.com/doc/refman/8.0/en/error-log.html」,但願新的日誌可以給您帶來幫助,感謝關注「MySQL解決方案工程師」!


本文分享自微信公衆號 - MySQL解決方案工程師(mysqlse)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索