MySQL 伺服器版本 8 的眾多顯著變更包括一個新的以元件為基礎的基礎結構。這將使架構更加模組化,同時允許使用者加入單個元件來擴展伺服器功能。
每個元件都提供伺服器以及其他元件可用的服務。事實上,伺服器本身現在被認為是一個元件,與其他元件一樣。元件只透過它們提供的服務互相互動。
啟用元件
透過 INSTALL COMPONENT 和 UNINSTALL COMPONENT SQL 語句載入和卸載元件。例如:
INSTALL COMPONENT 'file://component_validate_password'; UNINSTALL COMPONENT 'file://component_validate_password';
載入器服務處理元件載入和卸載,還列出 mysql.component 系統資料表中已載入的元件。
INSTALL COMPONENT 將元件載入至伺服器中並立即啟用它們。載入器服務還在mysql.component 系統資料表中註冊已載入的元件。對於隨後的伺服器重新啟動,mysql.component 中列出的任何元件都在啟動期間由載入器服務載入。
UNINSTALL COMPONENT 取消啟用元件並從伺服器卸載它們。載入器服務還會從 mysql.component 系統資料表中取消註冊元件,以便在隨後的伺服器重新啟動期間不再載入它們。
若要查看已安裝的元件,請使用以下語句:
SELECT * FROM mysql.component;
錯誤記錄篩選和路由
由於採用了新的元件架構,可以過濾記錄事件,並可以將各種格式的輸出傳送至多個目標,包括 JSON。記錄事件甚至可以路由至第三方產品,如 Navicat Monitor,以進行其他處理和分析。
錯誤記錄配置儲存在 global_variables 資料表中的全域 log_error_services 和 log_error_verbosity 變數中。錯誤記錄變數都是以「log_error_」為前置字元,因此我們可以按如下方式取得兩者的值:
mysql>select * from global_variables where VARIABLE_NAME like 'log_error_%'; +---------------------+----------------------------------------+ | VARIABLE_NAME | VARIABLE_VALUE | +---------------------+----------------------------------------+ | log_error_services | log_filter_internal; log_sink_internal | | log_error_verbosity | 2 | +---------------------+----------------------------------------+
有四個可用的記錄元件。它們儲存在 lib/plugins 目錄中,副檔名為「.so」:
- component_log_filter_dragnet.so
- component_log_sink_json.so
- component_log_sink_syseventlog.so
- component_log_sink_test.so
元件可以細分為兩種類型:filter 和 sink。
- filter 元件完成針對錯誤記錄事件的篩選。如果沒有啟用 filter 元件,就不會進行篩選。否則,任何已啟用的 filter 元件僅影響 log_error_services 變數中稍後列出的元件的記錄事件。
- 錯誤記錄 sink 元件是寫入器,負責錯誤記錄輸出。如果沒有啟用 sink 元件,就不會發生件何記載輸出。某些 sink 元件描述是指預設的錯誤記錄目標。這是由 log_error 系統變量指示的主控台或檔案。
若要載入元件,你需要指定其 URN。這包括:
“file://” + [沒有 .so 副檔名的檔案名稱]
例如,若要將編寫器載入至 json 元件,你可以啟用它,像這樣:
mysql> INSTALL COMPONENT 'file://component_log_sink_json'; mysql> SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal; log_sink_json'; mysql> select * from global_variables where VARIABLE_NAME like 'log_error_%'; +---------------------+-------------------------------------------------------+ | VARIABLE_NAME | VARIABLE_VALUE | +---------------------+-------------------------------------------------------+ | log_error_services | log_filter_internal; log_sink_internal; log_sink_json | | log_error_verbosity | 2 | +---------------------+-------------------------------------------------------+
我們將在後續的文章中更詳細地探索 MySQL 8 中的錯誤記錄!