在 MySQL (5.5) 中,哪个状态变量反映max_connect_errors了服务器比较的当前连接错误数?我以为是,Aborted_connects但在我的测试中,我仍然可以在驱动 aborted_connects(连续)远远高于max_connect_errors...
换个方式问,mysql 服务器是否检查aborted_connects任何阈值变量?是否有任何行为取决于该状态变量的值(或者仅供 DBA 参考)?
编辑 1
澄清一下,我对如何到达不太感兴趣max_connect_errors,而对高是否aborted_connects会产生任何负面影响更感兴趣。
对于上下文:
我们使用第 4 层 (TCP) 负载平衡器在 MySQL 只读从服务器集群中分发应用程序服务器的数据库连接池的 JDBC 连接。负载均衡器 (AWS ELB) 具有基于 TCP 的健康检查功能 - 它通过与数据库服务器的 mysql 端口建立 TCP 连接来定期检查数据库服务器的健康状况。由于 LB 不会说 'JDBC',所以实际上它所做的只是创建一个 TCP 连接并立即断开连接。但是,这些连接中的每一个都aborted_connects在 mysqld 上增加。我看没有其他副作用,但是想知道跑起来aborted_connects最终会不会有负面影响(比如mysqld会禁止LB的IP,从而导致健康检查失败)
谢谢你 -nikita
max_connect_errors是基于每个主机的,所以我怀疑它是否会检查状态变量,例如Aborted_connects.
如果您使用“localhost”(不使用 TCP)进行测试,则此变量可能不适用,如果将 localhost 锁定会发生什么情况?没有人可以连接(假设只有一个 root 用户并且无法远程登录 root)!
所以我想深入研究这个来源。在文件 'sql/hostname.cc' 中是一个函数ip_to_hostname。这个函数有以下注释(强调我的):
将 IP 地址解析为主机名。
该函数执行以下操作: - 解析 IP 地址;- 采用正向确认反向 DNS 技术来验证 IP 地址;- 如果 IP 地址被验证,则返回主机名;- 将值设置为 out-variable connect_errors -- 此变量表示来自指定 IP 地址的连接错误数。
注意:connect_errors 仅针对可以解析 IP 地址且通过 FCrDNS 检查的客户端进行计数(支持)。
关于本地主机(或像 127.0.0.1 这样的环回 ip)也有这样的评论:
*connect_errors= 0; /* Do not count connect errors from localhost. */
Run Code Online (Sandbox Code Playgroud)
此外,connect_errors 增加的唯一时间是在同一 sql/hostname.cc 文件的函数“inc_host_errors”中。这仅从 sql/sql_acl.cc 文件中调用。看起来这些是一些情况:
1) 数据包有错误(数据包长度不匹配)。这也可能是文档说的原因:
如果您收到给定主机的 Host 'host_name' is blocks 错误消息,您应该首先验证来自该主机的 TCP/IP 连接没有任何问题。如果您遇到网络问题,增加 max_connect_errors 变量的值对您没有好处。
2) 本机密码无效(功能为native_password_authenticate)
3) 旧式密码无效(功能是old_password_authenticate)
我可能错过了一些事情,但最终max_connect_errors与中止的连接无关,而是网络问题或无效密码。
为了完成起见,我会提到我正在查看 Percona 5.5.15-rel21 源代码。
那么,Aborted_connects与它有什么关系呢?好吧,根据这个文档,它会随时增加:
客户端没有连接到数据库的权限。
客户端使用了错误的密码。
连接数据包不包含正确的信息。
获取连接数据包需要多于 connect_timeout 秒。
因此,Aborted_connects这只是 DBA 知道可能存在问题的一个指标(例如:如果它在一段时间内急剧增加,则有人可能试图入侵服务器,但max_connect_errors在这种情况下您应该受到保护)。
如果您的健康检查稳步增加,如果它异常飙升,您仍然可以使用它。
| 归档时间: |
|
| 查看次数: |
3530 次 |
| 最近记录: |