MySQL 伺服器維護一個內存主機快取,其中包含用戶端主機名稱和 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。如果其中五個用戶端發生封鎖錯誤,則每個用戶端的SUM_CONNECT_ERRORS
都會加一,導致SUM_CONNECT_ERRORS
的值變為 204。其他五個用戶端成功連線且未被封鎖,因為在它們開始嘗試連線時,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 位址不符的 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
權限。截斷資料表會清除主機快取,其效果如清除主機快取中所述。