文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


29.12.22.2 error_log 資料表

在 MySQL 伺服器維護的記錄檔中,其中一個是錯誤記錄檔,它會將診斷訊息寫入其中 (請參閱第 7.4.2 節,「錯誤記錄檔」)。通常,伺服器會將診斷資訊寫入伺服器主機上的檔案或系統記錄服務。根據錯誤記錄檔組態,伺服器也可以將最新的錯誤事件寫入效能架構 error_log 資料表。因此,授予 error_log 資料表的 SELECT 權限,可讓用戶端和應用程式使用 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 9.0.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 欄位。

    在效能架構中,error_log 表格中的 THREAD_ID 欄位與 threads 表格的 PROCESSLIST_ID 欄位最為相似。

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

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

    許多效能架構表格(error_log 表格除外)都有名為 THREAD_ID 的欄位,但在這些表格中,THREAD_ID 欄位是效能架構內部指派的值。

  • 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 表格的實作和設定

效能架構的 error_log 表格由錯誤日誌接收器元件填入,這些元件除了將格式化的錯誤事件寫入錯誤日誌之外,還會寫入表格。日誌接收器對效能架構的支援有兩個部分

  • 日誌接收器可以在新錯誤事件發生時將其寫入 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 上次寫入表格的時間