25.12.16.1 host_cachetable

host_cachetable 提供对主机缓存内容的访问,该内容包含 Client 端主机名和 IP 地址信息,并用于避免域名系统(DNS)查找。 host_cache_size系统变量控制主机缓存的大小,以及公开缓存内容的host_cachetable 的大小。有关主机缓存的操作和配置信息,请参见第 5.1.11.2 节“ DNS 查找和主机缓存”

由于host_cachetable 公开了主机缓存的内容,因此可以使用SELECT语句对其进行检查。这可以帮助您诊断连接问题的原因。必须启用性能模式,否则此 table 为空。

host_cachetable 具有以下列:

  • IP

连接到服务器的 Client 端的 IP 地址,以字符串形式 table 示。

  • HOST

该 Client 端 IP 的已解析 DNS 主机名;如果名称未知,则为NULL

  • HOST_VALIDATED

是否成功为 Client 端 IP 执行了 IP 到主机名到 IP 的 DNS 解析。如果HOST_VALIDATEDYES,则HOST列用作与 IP 对应的主机名,这样可以避免对 DNS 的其他调用。当HOST_VALIDATEDNO时,将尝试为每次连接尝试进行 DNS 解析,直到最终以有效结果或永久错误完成解析。此信息使服务器可以避免在临时 DNS 故障期间缓存错误的主机名或丢失主机名,这将永远对 Client 端造成负面影响。

  • 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 个 Client 端,则由于SUM_CONNECT_ERRORS尚未达到 200 而没有一个被阻止。如果五个 Client 端发生阻止错误,则SUM_CONNECT_ERRORS增加对于每个 Client 端,一个SUM_CONNECT_ERRORS乘以一个值,结果SUM_CONNECT_ERRORS值为 204.其他五个 Client 端成功且未被阻止,因为在其连接尝试开始时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系统 table 中的Host列值与主机名进行匹配,该主机名的一个或多个初始组成部分完全是数字的,例如1.2.example.com。而是使用 Client 端 IP 地址。有关为什么不进行此类匹配的基本原理,请参见第 6.2.4 节“指定帐户名”

  • COUNT_ADDRINFO_TRANSIENT_ERRORS

主机名到 IP 反向 DNS 解析期间的瞬时错误数。

  • COUNT_ADDRINFO_PERMANENT_ERRORS

主机名到 IP 反向 DNS 解析期间的永久错误数。

  • COUNT_FCRDNS_ERRORS

前向确认反向 DNS 错误的数量。当 IP 到主机名到 IP DNS 解析生成的 IP 地址与 Client 端原始 IP 地址不匹配时,会发生这些错误。

  • COUNT_HOST_ACL_ERRORS

由于不允许用户从 Client 端主机进行连接而发生的错误数。在这种情况下,服务器返回ER_HOST_NOT_PRIVILEGED,甚至不询问用户名或密码。

  • COUNT_NO_AUTH_PLUGIN_ERRORS

由于请求不可用的身份验证插件而导致的错误数。例如,如果从未加载过插件或加载尝试失败,则插件可能不可用。

  • COUNT_AUTH_PLUGIN_ERRORS

身份验证插件报告的错误数。

身份验证插件可以报告不同的错误代码,以指示失败的根本原因。根据错误的类型,这些列之一将递增:COUNT_AUTHENTICATION_ERRORSCOUNT_AUTH_PLUGIN_ERRORSCOUNT_HANDSHAKE_ERRORS。新的返回码是对现有插件 API 的可选扩展。 COUNT_AUTH_PLUGIN_ERRORS栏中计入未知或意外的插件错误。

  • COUNT_HANDSHAKE_ERRORS

在有线协议级别检测到的错误数。

  • COUNT_PROXY_USER_ERRORS

将代理用户 A 代理给不存在的另一个用户 B 时检测到的错误数。

  • COUNT_PROXY_USER_ACL_ERRORS

将代理用户 A 代理给确实存在但其不具有PROXY特权的另一个用户 B 时检测到的错误数。

  • COUNT_AUTHENTICATION_ERRORS

身份验证失败导致的错误数。

  • COUNT_SSL_ERRORS

SSL 问题导致的错误数。

  • COUNT_MAX_USER_CONNECTIONS_ERRORS

超出每个用户的连接配额导致的错误数。参见第 6.2.16 节“设置帐户资源限制”

  • COUNT_MAX_USER_CONNECTIONS_PER_HOUR_ERRORS

超出每个用户每小时的连接配额导致的错误数。参见第 6.2.16 节“设置帐户资源限制”

  • COUNT_DEFAULT_DATABASE_ERRORS

与默认数据库有关的错误数。例如,数据库不存在,或者用户没有访问它的特权。

  • COUNT_INIT_CONNECT_ERRORS

init_connect系统变量值中的语句执行失败所引起的错误数。

  • COUNT_LOCAL_ERRORS

服务器实现本地错误的数量,与网络,身份验证或授权无关。例如,内存不足的情况属于此类。

  • COUNT_UNKNOWN_ERRORS

此 table 中其他列未解决的其他未知错误的数量。如果必须报告新的错误情况,以及是否需要保留host_cachetable 的向后兼容性和结构,则保留此列供将来使用。

  • FIRST_SEEN

从 Client 端的IP列中看到的第一次连接尝试的时间戳。

  • LAST_SEEN

从 Client 端的IP列中看到的最新连接尝试的时间戳。

  • FIRST_ERROR_SEEN

在 Client 端的IP列中看到的第一个错误的时间戳。

  • LAST_ERROR_SEEN

从 Client 端在IP列中看到的最新错误的时间戳。

FLUSH HOSTS语句,截断 tablehost_cache语句和mysqladmin flush-hosts命令具有相同的效果:它们清除主机缓存,从host_cachetable 中删除所有显示缓存内容的行,并取消阻止所有被阻塞的主机(请参见B.4.2.5 节,“主机'host_name'被阻止”)。 FLUSH HOSTSmysqladmin flush-hosts需要RELOAD特权。 TRUNCATE TABLE要求host_cachetable 具有DROP特权。