Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (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的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_ERRORSmax_ 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_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 代理到存在但用户 B 对 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 TABLEhost_cache 表是允许的。对该表进行截断需要 DROP 权限。截断表将清空主机缓存,这些效果在 清空主机缓存 中有详细说明。