使用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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。