Mysql系統變數中 log_error_services | log_filter_internal; log_sink_internal 和 log_error_verbosity | 2 解釋

文采杰出發表於2024-05-03
在MySQL中,log_error_services 允許你配置一系列的日誌過濾器和日誌接收器(sinks),以控制錯誤日誌的生成和輸出。這些元件共同決定了哪些日誌訊息應該被記錄,以及它們應該被髮送到哪裡。

log_filter_internal:

這是一個內建的日誌過濾器元件。
它的主要目的是過濾掉那些不需要記錄到錯誤日誌的訊息。
預設情況下,log_filter_internal 會過濾掉一些不太重要的訊息,如警告、通知等,只保留錯誤和嚴重警告。
你可以透過配置log_filter_internal的過濾級別來改變它的行為,例如讓它也記錄警告訊息。
log_sink_internal:

這是一個內建的日誌接收器(sink)元件。
它的主要任務是將日誌訊息寫入到指定的目的地。
預設情況下,log_sink_internal 會將日誌訊息寫入到由 log_error 系統變數指定的檔案中,通常是hostname.err檔案,除非你改變了log_error的設定。
你可以配置多個sinks,並且log_sink_internal 只是其中之一。其他的sinks,如 log_sink_json 或 log_sink_syseventlog,也可以被配置來同時接收和處理日誌訊息。
當你設定 log_error_services 為 log_filter_internal; log_sink_internal 時,你實際上是在告訴MySQL:首先使用 log_filter_internal 過濾器來篩選日誌訊息,然後將篩選後的訊息傳送到 log_sink_internal 接收器進行記錄。

這種配置方式提供了很大的靈活性,因為你可以很容易地新增、刪除或修改過濾器和接收器,以滿足特定的日誌記錄需求。同時,它也使得錯誤日誌的管理和監控變得更加簡單和高效。

在 MySQL 中,log_error_verbosity 是一個系統變數,用於控制錯誤日誌中記錄的訊息的詳細程度。這個變數決定了哪些型別的訊息應該被寫入錯誤日誌。

log_error_verbosity 的值可以是 0 到 3 之間的整數,每個級別都決定了不同的日誌詳細程度:

0 (最低詳細程度): 只記錄嚴重的錯誤訊息,例如伺服器啟動失敗或表損壞等。
1 (低詳細程度): 記錄錯誤訊息和一些警告。這是預設的設定。
2 (中詳細程度): 除了錯誤和警告之外,還記錄一些重要的通知資訊。這通常用於診斷問題,因為它提供了比預設設定更多的上下文資訊。
3 (高詳細程度): 記錄所有型別的訊息,包括除錯資訊。這通常只在開發或除錯階段使用,因為它會產生大量的日誌輸出。
當你設定 log_error_verbosity 為 2 時,你告訴 MySQL 記錄錯誤、警告以及一些重要的通知資訊到錯誤日誌中。這個設定通常對於日常的運維和故障排查是足夠的,因為它既不會過於冗長(像級別 3 那樣包含大量除錯資訊),也不會過於簡略(像級別 0 或 1 那樣可能會漏掉一些有用的資訊)。

你可以透過以下 SQL 語句來設定 log_error_verbosity 的值:

sql
SET GLOBAL log_error_verbosity = 2;
或者,你可以在 MySQL 的配置檔案(通常是 my.cnf 或 my.ini)中設定:

[mysqld]
log_error_verbosity = 2
這樣,MySQL 伺服器在啟動時就會使用這個配置,並相應地調整錯誤日誌的詳細程度。記得在修改配置檔案後重新啟動 MySQL 服務以使更改生效。

相關文章