MySQL 伺服器維護一個記憶體內的 host 快取,其中包含用戶端主機名稱和 IP 位址資訊,用於避免網域名稱系統 (DNS) 查閱。host_cache
表格公開此快取的內容。host_cache_size
系統變數控制主機快取的大小,以及 host_cache
表格的大小。如需有關主機快取的操作和組態資訊,請參閱第 7.1.12.3 節「DNS 查閱與主機快取」。
由於 host_cache
表格公開主機快取的內容,因此可以使用 SELECT
陳述式進行檢視。這有助於您診斷連線問題的原因。
host_cache
表格具有以下欄位:
IP
連線至伺服器的用戶端 IP 位址,表示為字串。
HOST
該用戶端 IP 解析的 DNS 主機名稱,如果名稱不明則為
NULL
。HOST_VALIDATED
是否已成功為用戶端 IP 執行 IP 至主機名稱至 IP 的 DNS 解析。如果
HOST_VALIDATED
為YES
,則HOST
欄位會用作對應於 IP 的主機名稱,以便避免額外呼叫 DNS。如果HOST_VALIDATED
為NO
,則會針對每次連線嘗試進行 DNS 解析,直到最終完成,並產生有效的結果或永久錯誤。此資訊可讓伺服器避免在暫時 DNS 失敗期間快取錯誤或遺失的主機名稱,否則會對用戶端產生永久性的負面影響。SUM_CONNECT_ERRORS
被視為「封鎖」的連線錯誤數 (根據
max_connect_errors
系統變數進行評估)。僅計算通訊協定交握錯誤,且僅針對通過驗證的主機 (HOST_VALIDATED = YES
)。一旦給定主機的
SUM_CONNECT_ERRORS
達到max_connect_errors
的值,就會封鎖來自該主機的新連線。SUM_CONNECT_ERRORS
的值可能會超過max_connect_errors
的值,因為來自主機的多個連線嘗試可能會在主機未封鎖時同時發生。它們中的任何或全部都可能會失敗,並獨立遞增SUM_CONNECT_ERRORS
,可能超過max_connect_errors
的值。假設
max_connect_errors
為 200,而特定主機的SUM_CONNECT_ERRORS
為 199。若有 10 個用戶端同時嘗試從該主機連線,則它們都不會被封鎖,因為SUM_CONNECT_ERRORS
尚未達到 200。若其中 5 個用戶端發生封鎖錯誤,則每個用戶端的SUM_CONNECT_ERRORS
會加一,導致SUM_CONNECT_ERRORS
的值為 204。其他 5 個用戶端成功連線且未被封鎖,因為在它們開始嘗試連線時,SUM_CONNECT_ERRORS
的值尚未達到 200。在SUM_CONNECT_ERRORS
達到 200 之後,來自該主機的新連線將會被封鎖。COUNT_HOST_BLOCKED_ERRORS
由於
SUM_CONNECT_ERRORS
超過系統變數max_connect_errors
的值而被封鎖的連線數量。COUNT_NAMEINFO_TRANSIENT_ERRORS
在 IP 位址解析為主機名稱的 DNS 解析過程中,發生的暫時性錯誤數量。
COUNT_NAMEINFO_PERMANENT_ERRORS
在 IP 位址解析為主機名稱的 DNS 解析過程中,發生的永久性錯誤數量。
COUNT_FORMAT_ERRORS
主機名稱格式錯誤的數量。MySQL 不會將
mysql.user
系統表格中Host
欄位的值與名稱中一個或多個初始元件完全為數字的主機名稱進行比對,例如1.2.example.com
。而是使用用戶端 IP 位址。關於為什麼不進行這種比對的原因,請參閱第 8.2.4 節,「指定帳戶名稱」。COUNT_ADDRINFO_TRANSIENT_ERRORS
在主機名稱反向解析為 IP 位址的 DNS 解析過程中,發生的暫時性錯誤數量。
COUNT_ADDRINFO_PERMANENT_ERRORS
在主機名稱反向解析為 IP 位址的 DNS 解析過程中,發生的永久性錯誤數量。
COUNT_FCRDNS_ERRORS
正向確認反向 DNS 錯誤的數量。當 IP 位址解析為主機名稱,再將主機名稱解析回 IP 位址的 DNS 解析結果,與用戶端原始 IP 位址不符時,就會發生這些錯誤。
COUNT_HOST_ACL_ERRORS
由於沒有任何使用者被允許從用戶端主機連線而發生的錯誤數量。在這種情況下,伺服器會傳回
ER_HOST_NOT_PRIVILEGED
,甚至不會要求輸入使用者名稱或密碼。COUNT_NO_AUTH_PLUGIN_ERRORS
因請求使用無法使用的驗證外掛程式而發生的錯誤數量。例如,外掛程式可能從未載入,或載入嘗試失敗,則外掛程式就可能無法使用。
COUNT_AUTH_PLUGIN_ERRORS
驗證外掛程式回報的錯誤數量。
驗證外掛程式可以回報不同的錯誤代碼,以指示失敗的根本原因。根據錯誤類型,會增加下列其中一個欄位的值:
COUNT_AUTHENTICATION_ERRORS
、COUNT_AUTH_PLUGIN_ERRORS
、COUNT_HANDSHAKE_ERRORS
。新的回傳代碼是對現有外掛程式 API 的可選擴充功能。未知或意外的外掛程式錯誤會計入COUNT_AUTH_PLUGIN_ERRORS
欄位。COUNT_HANDSHAKE_ERRORS
在網路協定層級偵測到的錯誤數量。
COUNT_PROXY_USER_ERRORS
當代理使用者 A 被代理到不存在的另一個使用者 B 時偵測到的錯誤數量。
COUNT_PROXY_USER_ACL_ERRORS
當代理使用者 A 被代理到另一個確實存在的使用者 B,但 A 沒有 B 的
PROXY
權限時偵測到的錯誤數量。COUNT_AUTHENTICATION_ERRORS
因驗證失敗而發生的錯誤數量。
COUNT_SSL_ERRORS
因 SSL 問題而發生的錯誤數量。
COUNT_MAX_USER_CONNECTIONS_ERRORS
因超出每使用者連線配額而發生的錯誤數量。請參閱第 8.2.21 節,「設定帳戶資源限制」。
COUNT_MAX_USER_CONNECTIONS_PER_HOUR_ERRORS
因超出每使用者每小時連線配額而發生的錯誤數量。請參閱第 8.2.21 節,「設定帳戶資源限制」。
COUNT_DEFAULT_DATABASE_ERRORS
與預設資料庫相關的錯誤數量。例如,資料庫不存在或使用者沒有存取權限。
COUNT_INIT_CONNECT_ERRORS
因
init_connect
系統變數值中的陳述式執行失敗而發生的錯誤數量。COUNT_LOCAL_ERRORS
伺服器實作本地的錯誤數量,與網路、驗證或授權無關。例如,記憶體不足的情況屬於此類別。
COUNT_UNKNOWN_ERRORS
此表格中其他欄位未說明之其他未知錯誤的數量。此欄位保留供未來使用,以防需要回報新的錯誤情況,並且如果需要保留
host_cache
表格的回溯相容性和結構的話。FIRST_SEEN
在
IP
欄位中,從用戶端看到的第一次連線嘗試的時間戳記。LAST_SEEN
在
IP
欄位中,從用戶端看到的最近一次連線嘗試的時間戳記。FIRST_ERROR_SEEN
在
IP
欄位中,從用戶端看到的第一次錯誤的時間戳記。LAST_ERROR_SEEN
在
IP
欄位中,從用戶端看到的最近一次錯誤的時間戳記。
host_cache
表格具有下列索引
以 (
IP
) 為主鍵以 (
HOST
) 為索引
允許對 host_cache
表格使用 TRUNCATE TABLE
。這需要表格的 DROP
權限。截斷表格會清空主機快取,其效果如清空主機快取中所述。