文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美國信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


29.12.22.2 error_log 資料表

在 MySQL 伺服器維護的日誌中,其中一個是錯誤日誌,它會將診斷訊息寫入其中 (請參閱第 7.4.2 節,「錯誤日誌」)。 通常,伺服器會將診斷寫入伺服器主機上的檔案或系統日誌服務。 根據錯誤日誌組態,伺服器也可以將最近的錯誤事件寫入 Performance Schema error_log 資料表。 因此,授與 SELECT 權限給 error_log 資料表,即可讓用戶端和應用程式使用 SQL 查詢存取錯誤日誌內容,讓 DBA 能夠在不需要允許伺服器主機上的直接檔案系統存取的情況下,提供日誌存取權。

error_log 資料表支援根據其更結構化的欄位進行重點查詢。 它還包含錯誤訊息的完整文字,以支援更自由形式的分析。

資料表實作使用固定大小的記憶體環狀緩衝區,舊事件會自動捨棄,以便為新事件騰出空間。

error_log 內容範例

mysql> SELECT * FROM performance_schema.error_log\G
*************************** 1. row ***************************
    LOGGED: 2020-08-06 09:25:00.338624
 THREAD_ID: 0
      PRIO: System
ERROR_CODE: MY-010116
 SUBSYSTEM: Server
      DATA: mysqld (mysqld 8.4.0) starting as process 96344
*************************** 2. row ***************************
    LOGGED: 2020-08-06 09:25:00.363521
 THREAD_ID: 1
      PRIO: System
ERROR_CODE: MY-013576
 SUBSYSTEM: InnoDB
      DATA: InnoDB initialization has started.
...
*************************** 65. row ***************************
    LOGGED: 2020-08-06 09:25:02.936146
 THREAD_ID: 0
      PRIO: Warning
ERROR_CODE: MY-010068
 SUBSYSTEM: Server
      DATA: CA certificate /var/mysql/sslinfo/cacert.pem is self signed.
...
*************************** 89. row ***************************
    LOGGED: 2020-08-06 09:25:03.112801
 THREAD_ID: 0
      PRIO: System
ERROR_CODE: MY-013292
 SUBSYSTEM: Server
      DATA: Admin interface ready for connections, address: '127.0.0.1' port: 33062

error_log 資料表具有下列欄位。 如描述中所述,除了 DATA 欄位之外,所有欄位都對應於底層錯誤事件結構的欄位,該結構在 第 7.4.2.3 節,「錯誤事件欄位」中說明。

  • LOGGED

    事件時間戳記,精確到微秒。 LOGGED 對應於錯誤事件的 time 欄位,儘管具有某些潛在差異

    若要以與錯誤日誌檔案中顯示的時區相同的時區顯示 LOGGED 值,請先依如下方式設定工作階段時區

    SET @@session.time_zone = @@global.log_timestamps;

    如果 log_timestamps 值為 UTC,而且您的系統未安裝具名的時區支援 (請參閱第 7.1.15 節,「MySQL 伺服器時區支援」),請依如下方式設定時區

    SET @@session.time_zone = '+00:00';
  • THREAD_ID

    MySQL 執行緒 ID。 THREAD_ID 對應於錯誤事件的 thread 欄位。

    在 Performance Schema 中,error_log 資料表中的 THREAD_ID 欄與 threads 資料表的 PROCESSLIST_ID 欄最相似

    • 對於前景執行緒,THREAD_IDPROCESSLIST_ID 代表連線識別碼。這與 INFORMATION_SCHEMAPROCESSLIST 表格的 ID 欄位中顯示的值相同,也與 SHOW PROCESSLIST 輸出的 Id 欄位中顯示的值相同,並由執行緒內的 CONNECTION_ID() 函數傳回。

    • 對於背景執行緒,THREAD_ID 為 0,而 PROCESSLIST_IDNULL

    除了 error_log 之外的許多 Performance Schema 表格都有一個名為 THREAD_ID 的欄位,但在這些表格中,THREAD_ID 欄位是由 Performance Schema 內部指定的值。

  • PRIO

    事件的優先順序。允許的值為 SystemErrorWarningNotePRIO 欄位基於錯誤事件的 label 欄位,而該欄位本身又基於底層的數值 prio 欄位值。

  • ERROR_CODE

    數值事件錯誤代碼。ERROR_CODE 對應於錯誤事件的 error_code 欄位。

  • SUBSYSTEM

    事件發生的子系統。SUBSYSTEM 對應於錯誤事件的 subsystem 欄位。

  • DATA

    錯誤事件的文字表示。此值的格式取決於產生 error_log 列的記錄接收器元件產生的格式。例如,如果記錄接收器是 log_sink_internallog_sink_json,則 DATA 值分別以傳統或 JSON 格式表示錯誤事件。(請參閱第 7.4.2.9 節,「錯誤記錄輸出格式」。)

    由於可以重新設定錯誤記錄檔,以變更提供列給 error_log 表格的記錄接收器元件,而且不同的接收器產生不同的輸出格式,因此在不同時間寫入 error_log 表格的列可能會具有不同的 DATA 格式。

error_log 表格具有以下索引

  • LOGGED)的主鍵

  • THREAD_ID)上的索引

  • PRIO)上的索引

  • ERROR_CODE)上的索引

  • SUBSYSTEM)上的索引

不允許對 error_log 表格使用 TRUNCATE TABLE

error_log 表格的實作和組態

Performance Schema error_log 表格由錯誤記錄接收器元件填入,這些元件除了將格式化的錯誤事件寫入錯誤記錄檔之外,還會寫入表格。記錄接收器對 Performance Schema 的支援分為兩個部分

  • 記錄接收器可以在新的錯誤事件發生時將其寫入 error_log 表格。

  • 記錄接收器可以提供剖析器,以擷取先前寫入的錯誤訊息。這讓伺服器執行個體能夠讀取先前執行個體寫入錯誤記錄檔的訊息,並將其儲存在 error_log 表格中。先前執行個體在關閉期間寫入的訊息對於診斷關閉發生的原因可能很有用。

目前,傳統格式的 log_sink_internal 和 JSON 格式的 log_sink_json 接收器支援將新事件寫入 error_log 表格,並提供剖析器以讀取先前寫入的錯誤記錄檔。

log_error_services 系統變數控制要啟用哪些記錄元件以進行錯誤記錄。其值是一個記錄篩選器和記錄接收器元件的管線,當發生錯誤事件時,這些元件將從左到右執行。log_error_services 值與填入 error_log 表格有關,如下所示

  • 在啟動時,伺服器會檢查 log_error_services 值,並從中選擇最左邊符合以下條件的記錄接收器

    • 支援 error_log 表格並提供剖析器的接收器。

    • 如果沒有,則為支援 error_log 表格但不提供剖析器的接收器。

    如果沒有任何記錄接收器符合這些條件,則 error_log 表格會保持空白。否則,如果接收器提供剖析器,且記錄組態允許找到先前寫入的錯誤記錄檔,則伺服器會使用接收器剖析器讀取檔案的最後一部分,並將其中包含的舊事件寫入表格。然後,接收器會在新的錯誤事件發生時將其寫入表格。

  • 在執行階段,如果 log_error_services 的值變更,伺服器會再次檢查它,這次尋找最左邊已啟用的、支援 error_log 表格的記錄接收器,無論它是否提供剖析器。

    如果不存在此類記錄接收器,則不會將其他錯誤事件寫入 error_log 表格。否則,新設定的接收器會在新的錯誤事件發生時將其寫入表格。

任何影響寫入錯誤記錄檔輸出的組態都會影響 error_log 表格的內容。這包括詳細程度、訊息抑制和訊息篩選等設定。它也適用於在啟動時從先前的記錄檔讀取的資訊。例如,如果先前伺服器執行個體以低詳細程度設定,則未寫入的訊息,如果目前的執行個體以較高的詳細程度設定讀取檔案,則不會變成可用。

error_log 表格是一個固定大小、記憶體中環形緩衝區的檢視,舊事件會自動丟棄,以騰出空間給新事件。如下表所示,多個狀態變數提供有關持續進行的 error_log 作業的資訊。

狀態變數 意義
Error_log_buffered_bytes 表格中使用的位元組數
Error_log_buffered_events 表格中存在的事件數
Error_log_expired_events 從表格中丟棄的事件數
Error_log_latest_write 上次寫入表格的時間