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
列将用作对应的主机名,以避免额外的 DNS 调用。否则,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 个客户端尝试从该主机连接,none of them 将被阻止,因为SUM_CONNECT_ERRORS
尚未达到 200。如果五个客户端的连接尝试失败,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 解析过程中的永久性错误数量。
-
格式错误计数
主机名格式错误的数量。 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
在 wire 协议级别检测到的错误数量。
-
COUNT_PROXY_USER_ERRORS
检测到代理用户 A 被代理到不存在的用户 B 的错误数量。
-
COUNT_PROXY_USER_ACL_ERRORS
检测到代理用户 A 被代理到存在的用户 B,但 A 没有
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
未知的其他错误数量,不包括表中的其他列。这一列保留供将来使用,以便在需要报告新错误条件时保持向后兼容性和表结构。
-
FIRST_SEEN
客户端在
IP
列中的第一个连接尝试的时间戳。 -
LAST_SEEN
客户端在
IP
列中的最新连接尝试的时间戳。 -
FIRST_ERROR_SEEN
从
IP
列中的客户端看到的第一个错误的时间戳。 -
LAST_ERROR_SEEN
从
IP
列中的客户端看到的最新错误的时间戳。
该 host_cache
表具有以下索引:
-
主键在 (
IP
) 上 -
在 (
HOST
) 上的索引
TRUNCATE TABLE
在 host_cache
表上是允许的。它需要表的 DROP
权限。截断表将刷新主机缓存,这将产生 刷新主机缓存 中描述的效果。