Navicat 部落格

2018 年 4 月 24 日,由 Robert Gravelle 撰寫

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 中的錯誤記錄!

Navicat 文章
頻道記錄
分享
部落格封存檔