29.12.22.3 host_cache 表
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的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值,因为多个连接尝试可能同时从未被阻止的主机发生,而这些主机正在进行DNS解析。任何或所有尝试都可能失败,独立地增加SUM_ CONNECT_ERRORS,有可能超过max_ connect_errors的值。假设系统变量
max_ connect_errors为200,SUM_ CONNECT_ERRORS对于给定主机为199。如果10个客户端同时尝试从该主机连接,那么没有任何人被阻止,因为SUM_ CONNECT_ERRORS尚未达到200。若5个客户端的连接尝试出现阻塞错误,SUM_ CONNECT_ERRORS每个客户端增加1,结果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_ERRORSIP-主机名DNS解析过程中的暂时性错误数量。
-
COUNT_NAMEINFO_PERMANENT_ERRORSIP-主机名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 没有
PROXY权限的另一个用户 B 时发生的错误数量。 -
COUNT_AUTHENTICATION_ERRORS由于认证失败而发生的错误数量。
-
COUNT_SSL_ERRORSSSL 问题导致的错误数量。
-
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) 的索引。
TRUNCATE TABLE 对 host_cache 表是允许的。对该表进行截断需要 DROP 权限。截断表将清空主机缓存,这些效果在 清空主机缓存 中有详细说明。