Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

29.12.22.3 主机缓存表

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 列将用作对应的主机名,以避免额外的 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_ERRORSCOUNT_AUTH_PLUGIN_ERRORSCOUNT_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 TABLEhost_cache 表上是允许的。它需要表的 DROP 权限。截断表将刷新主机缓存,这将产生 刷新主机缓存 中描述的效果。