文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


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 到主机名再到 IP 的 DNS 解析。如果 HOST_VALIDATEDYES,则 HOST 列将用作与 IP 对应的域名,以便避免额外调用 DNS。当 HOST_VALIDATEDNO 时,每次连接尝试都会尝试进行 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 都会增加 1,从而导致 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_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 代理到另一个存在但 A 对其没有 PROXY 权限的用户 B 时检测到的错误数。

  • 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)上的索引

TRUNCATE TABLE 允许用于 host_cache 表。它需要对该表的 DROP 权限。截断该表会刷新主机缓存,其效果如刷新主机缓存中所述。