被我误解的max_connect_errors

2023-05-16

实为吾之愚见,望诸君酌之!闻过则喜,与君共勉 

第一节  什么是max_connect_errors

一开始接触这个参数的时候,感觉他和max_connections的含义差不多,字面意思简单明了,这个参数的含义是最大连接错误数,翻翻mysql的文档中的解释是If more than this many successive connection requests from a host are interrupted without a successful connection, the server blocks that host from further connections,大意是:如果mysql服务器连续接收到了来自于同一个主机的请求,且这些连续的请求全部都没有成功的建立连接就被断开了,当这些连续的请求的累计值大于 max_connect_errors的设定值时,mysql服务器就会阻止这台主机后续的所有请求without a successful connection”那太好办了,故意输错密码不就行了,并且网上搜索了下该参数的说明,大量的文章充斥着 防止暴力破解密码的内容,于是兴高采烈的去做了测试。以下测试基于自建的mysql(非rds for mysql),由于rds for mysql无法直接设置set global,设置时需要在"rds控制台-参数这里"里进行设置:https://help.aliyun.com/document_detail/26179.html?spm=5176.11065259.1996646101.searchclickresult.44156de7pLffcV

第二节  测试max_connect_errors

1,创建账号:

b984add34b00bee3d562d96d25fa07ccb8145a7a

2,设置max_connect_errors3

4776ffe81ccffb4de40ab1daacd8220f5be822d2

3,故意输错密码3次,第四次使用正确密码登录进行验证:

f376ff16b8b381fcf71f4b79893db1fd11246e51

4,结论是第四次依然可以登录,即密码不对(认证失败)不属于without a successful connection”的范畴,网上的 防止暴力破解密码也不成立了。

6cd06be24be4b24af171a2710d5f5e790f977cb3

第三节 继续分析max_connect_errors

再继续看文档,发现还有以下说明:

 You can unblock blocked hosts by flushing the host cache. To do so, issue a FLUSH HOSTS statement or execute a mysqladmin flush-hosts command.

大意是:

当你遇到主机被阻止的时候,你可以清空host cache来解决,具体的清空方法是执行flush hosts或者在mysql服务器的shell里执行 mysqladmin flush-hosts操作

既然清空host cache可以解决主机被阻止访问的问题,那应该与host cache有些关系,看看host cache的介绍可能会有些眉目,关于host cache,文档解释如下:

The MySQL server maintains a host cache in memory that contains information about clients: IP address, host name, and error information. The server uses this cache for nonlocal TCP connections. It does not use the cache for TCP connections established using a loopback interface address (127.0.0.1 or ::1), or for connections established using a Unix socket file, named pipe, or shared memory.

大意是:

Mysql服务器会在内存里管理一个host cachehost cache里保存了一些客户端的ip地址,主机名,以及这个客户端在与server建立连接时遇到的一些错误信息,host cache对不是本地的TCP连接才有效,所以host cache127.0.0.1 或者::1是无效的,并且对于Unix socket filenamed pipe以及 shared memory方式建立的连接也是无效的。并且通过了解,host cache的内容可以通过performance_schema.host_cache来查看,通过performance_schema.host_cache表里的几个列的描述信息,对之前的测试不成立的原因有些了解了,部分相关列如下:

·        IP

The IP address of the client that connected to the server, expressed as a string.

连接到mysql server的主机的连接地址

·        HOST

The resolved DNS host name for that client IP, or NULL if the name is unknown.

通过dns解析IP地址获取到的该IP地址对应的mysql client的主机名

 

·        SUM_CONNECT_ERRORS

The number of connection errors that are deemed “blocking” (assessed against the max_connect_errors system variable). Only protocol handshake errors are counted, and only for hosts that passed validation (HOST_VALIDATED = YES).

 

·        COUNT_HANDSHAKE_ERRORS

The number of errors detected at the wire protocol level.

通过SUM_CONNECT_ERRORS(连接错误计数)描述,重点是红色部分:只计算协议握手过程的错误(Only protocol handshake errors are counted),也就是说max_connect_errors 可能记录的是协议(不确定是tcp协议还是应用协议,通过抓包以及COUNT_HANDSHAKE_ERRORS的 the wire protocol level说明可能是指应用协议)的握手过程中出现的错误 ,也就是可以说网络不好(无法顺利握手)会导致该问题。

第四节 继续测试max_connect_errors

通过之前的说明,需要模拟应用协议握手失败的情况,最后考虑使用telnet一些来做测试

1,创建账号

b984add34b00bee3d562d96d25fa07ccb8145a7a

2,设置max_connect_errors3

4776ffe81ccffb4de40ab1daacd8220f5be822d2

3,先使用telnet 10.26.254.217 3306连接3次,第四次使用正确的账号密码尝试登陆:

telnet前查看performance_schema.host_cache的记录为空

95e4568e7fe1b5cb44a21b30a9aa9210ef9f0a73

第一次telnet 10.26.254.217 3306

bce33a3ea7394f8e1d564c3921d3f294dcd79814

052299fb80bdd456d12855a8f84689011f13ce51

第二次 telnet 10.26.254.217 3306

9ac1875beec55c02bedc86afcee78400f63745c5

f7a6d9e971fdc753d65c5b116b95ed45572e0d55

第三次telnet 10.26.254.217 3306

aa6232eaa401e0c1bfa5cdcfc0f2168c379ec97a

09f732c6269039549da6393138a09d99cee2a878

第四次执行mysql -h10.26.254.217 -utestcon -p123 -P3306

3bba32ab58c65de19d912febc805d13f407c93b8

fe47d609cfd83b0867b5a64232d1a6aae1011505

问题复现了,出现了错误提示ERROR 1129 (HY000): Host '10.24.236.231' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

第五节 ERROR 1129 (HY000)问题延伸

解决ERROR 1129 (HY000)的方法是执行flush host或者 mysqladmin flush-hosts,其目的是为了清空host cache里的信息,那是不是说不使用host cache就可以了?使host cache不生效的方式有如下两种:

1,设置 host_cache_size 为0/ 打开skip-host-cache

2,打开skip-name-resolve 

需要通过测试看下推测是否生效

5.1 设置 host_cache_size 为0/ 打开skip-host-cache

1,设置host_cache_size为0

f0d9b5f93d58538762288eb6be86e8edb9cd6cab

2,再次查询performance_schema.host_cache

44dd050f8f353a71d9563c3b38092d0cc0bb65a9

3,继续之前的测试:先使用telnet 10.26.254.217 3306连接3次,第四次使用正确的账号密码尝试登陆

5f889f9d574cf843a1423a12ac4a2d21b73d9f8d

更改已经生效,max_connect_errors的作用无效了

5.2 打开skip-name-resolve 

1,在cnf配置文件里设置skip-name-resolve 以此打开skip-name-resolve 

123514e6b68f10befb209f4321c1ab82894fc7d3

2,继续之前的测试:先使用telnet 10.26.254.217 3306连接3次,第四次使用正确的账号密码尝试登陆

3fe7fac36742a2b9391267ab4936372a891e2d7a

3,查询performance_schema.host_cache

4f308a50bcc5c27cb666b61228177261312cd0e0

更改已经生效,max_connect_errors的作用无效了,RDS for  mysql 的skip_name_resolve是on的状态,

所以很少会出现ERROR 1129 (HY000)的错误

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

被我误解的max_connect_errors 的相关文章

  • CakePHP 用 MAX 查找

    表格和虚拟数据 CREATE TABLE IF NOT EXISTS messages id int 11 unsigned NOT NULL auto increment user id int 11 unsigned NOT NULL
  • 当我通过 socket.io 操作会话时,如何避免 node.js 中的竞争条件?

    我在我的 socket io 设置中使用这个授权函数 io set authorization function data accept if data headers cookie return accept Session cookie
  • 找到章节的最大深度

    每个人 在这种情况下 我想计算章节的最大深度 例如 一本没有章节的书的高度为 0 一本书只有章节没有章节 高度应该为1 以下是xml
  • 其中(向量 1 < 向量 2)

    让我们先举一个在 R 中计算的小例子 x lt c 1 3 1 4 2 max which x lt 2 1 3 现在 我不仅想对一个值 2 执行此操作 而且还想同时对多个值执行此操作 它应该给我类似的东西 max which x
  • `numpy.argmax()` 的理论平均情况运行时复杂度

    我正在看代码numpy argmax功能 我很困惑哪种数据结构numpy维持为argmax功能 https numpy org doc stable reference generated numpy argmax html https n
  • SSRS - OutOfMemoryException - 可以显示的行数是否有限制

    我创建了一个 rdl 文档 它指向一个返回 90 000 行的过程 但我遇到了内存不足的异常 报表项目可以处理的行数是否有限制 目前 我已经更改了驱动我的报告的过程 只选择前 90 000 行 我的规格是能够创建包含 120 000 行的报
  • 如何在 postgresql 中找到列中的最大值?

    例如 name weight jon 100 jane 120 joe 130 如何只返回权重最大的人的名字 SELECT name FROM tbl ORDER BY weight DESC LIMIT 1 比其他答案性能更高 并且仅产生
  • 如何从表中获取第二大或第三大条目[重复]

    这个问题在这里已经有答案了 谁能告诉我如何找到表中第 N 个最大的条目在甲骨文中 就像我们可以使用的最大的MAX 列名 有没有有效的方法来找到第n大的 SELECT FROM SELECT some column row number ov
  • 获取表的最大 ID 行

    我的问题是如何获取表的最大 id 行 我正在使用 max 函数 但给我一个错误 这是我的代码 public static long getLastIdQuotaAdded Context context long id Cursor cur
  • SQL不是单组组函数

    当我运行以下 SQL 语句时 SELECT MAX SUM TIME FROM downloads GROUP BY SSN 它返回客户下载的最大总价值 但是如果我尝试通过将其添加到 select 语句来查找该最大值所属的社会安全号码 SE
  • 如何获得连续行最大值的减去百分比?

    我正在显示按 date rehearsal 列分组的 col1 val 列的最大值 以下是演示 http sqlfiddle com 9 45112d 1 http sqlfiddle com 9 45112d 1 id col1 val
  • 需要在java中找到最多三个数字[重复]

    这个问题在这里已经有答案了 可能的重复 在 Java 中查找不同数据类型的 3 个数字中的最大值 基本 Java https stackoverflow com questions 4982210 find the max of 3 num
  • Ruby - 找到哈希值最大值的键

    我有一个散列 我想返回散列最大值的键 或键 值对 因此 如果只有一个真正的最大值 它将返回该键 但是 如果有多个具有相同值的键 值对 它将返回所有这些键 我怎样才能在 Ruby 中完成这个任务 my hash max by k v v on
  • 如何查询从 varchar 类型获取最大 id 和数字中的值?

    我有表和列 ID 值为 1 2 3 10 11 12 13 如何查询 varchar 类型的最大 id 我曾尝试过 select MAX id from table 但结果是9 请帮忙 看起来这些值是字符串 它选择最大的字符串 如果您希望它
  • 如何在 MATLAB 中找到数组中的最大值及其索引?

    假设我有一个数组 a 2 5 4 7 返回最大值及其索引的函数是什么 例如 在我的例子中 该函数应返回 7 作为最大值 4 作为索引 函数是max 要获得第一个最大值 您应该这样做 val idx max a val是最大值并且idx是它的
  • 带有 rpi 主站和从站的 Profibus [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我的任务是使用 Rpi 和 Rs 485 转换器构建 profibus 主站和从站网络 一个 Rpi 将成为主设备 另一个将成为从设备
  • SQL 使用 INNER JOIN 获取 MIN() 和 MAX()

    这段代码有问题 SELECT b MIN c seri as seri awal MAX c seri as seri akhir FROM berkas b LEFT JOIN certificate c ON c berkas nomo
  • 寻找最大最小值集合

    我正在尝试编写一个 天真的或半天真的 程序 给定一组元素和许多玩家将其划分为这个数量的玩家 并且对于每个这样的划分取最小值 按总和 子集 然后 我想计算所有这些最小除法的最大值 这被称为https en wikipedia org wiki
  • R:如何获取时间序列数据中日期时间列的最大值

    我正在研究时间序列数据 我有 2 个日期时间列和 1 个会计周列 我给出了一个例子 我遇到如下情况 我需要获取 EditDate 的最大值 EditDate lt c 2015 04 01 11 40 13 2015 04 03 02 54
  • Java 数组中的最小值和最大值

    我的代码没有给出错误 但它没有显示最小值和最大值 代码是 Scanner input new Scanner System in int array new int 10 System out println Enter the numbe

随机推荐

  • CentOS7 命令行安装teamviewer遇到依赖包问题及完美解决

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 公司新到了几台服务器做Docker集群方面的应用 xff0c 将这几台服务器搭建成一个集群 由于要经常同时操作这几台服务器 xff0c 而我又不喜欢待在机房 TeamVie
  • Windows+VScode配置与使用git,超详细教程,赶紧收藏吧

    目录 第一步 xff1a 安装Git命令行工具 第二步 xff1a 配置VScode中的git 第三步 xff1a 使用 VScode 43 git xff0c 提交到仓库 当我们在VScode中编写代码后 xff0c 需要提交到git仓库
  • Python爬虫开发的3大难题,别上了贼船才发现,水有多深

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 写爬虫 xff0c 是一个非常考验综合实力的活儿 有时候 xff0c 你轻而易举地就抓取到了想要的数据 xff1b 有时候 xff0c 你费尽心思却毫无所获 好多Pytho
  • OpenStack推出最新版本Newton,显著提升单一云平台 对虚拟化、裸机和容器的管理...

    2016 年 10 月 1 0 日 北京 OpenStack社区日前发布其命名为 Newton 的第14个版本 OpenStack是用于构建云的部署最广泛的开源软件 此次推出的新功能包括 xff1a Ironic裸机开通服务 xff0c M
  • BGP Extended Communities for OSPF PE-CE Routing-域ID

    要让OSPF路由的特性能够穿过MPLS 骨干网络 xff0c 就需要额外定义一些BGP扩展团体属性 可以通过MP BGP 传递的OSPF属性包括 xff1a MP BGP 扩展属性可是使得OSPF的路由可以完全的在远端PE路由器上重建 LS
  • ESP32 Arduino http协议digest认证 接入海康威视摄像机

    注意 xff1a 使用的是ArduinoHttpClient xff0c 与ESP32内部的HTTPClient库有较大的差别 海康摄像机http接入时候 xff0c 由于没有认证信息 xff0c 会返回401无权限信息 xff0c 这时需
  • 头条 offer,记一次 JAVA 面试经历和总结

    作者 xff1a 想去大厂的小菜鸡 本文的 我 xff0c 不是我 xff0c 是文中的作者 国庆期间公司的项目很闲 xff0c 很多人觉得没意思陆续走了 xff0c 我也考虑到自己的发展 xff0c 从9月底开始面 xff0c 面到11月
  • Centos6.4部署OpenStack

    现在好多公司都使用Openstack xff0c 我做这个也是小菜鸟一个 xff1b 网上看了一些资料说的都是openstack xff0c 但是现在openstack的版本不一样 所以亲们安装的时候一定要注意看一下你要安装的是那个版本 x
  • 【论文笔记】多任务学习(Multi-Task Learning)

    1 前言 多任务学习 xff08 Multi task learning xff09 是和单任务学习 xff08 single task learning xff09 相对的一种机器学习方法 在机器学习领域 xff0c 标准的算法理论是一次
  • 常用 API 函数(5): 文本和字体函数

    AddFontResource在Windows系统中添加一种字体资源CreateFont用指定的属性创建一种逻辑字体CreateFontIndirect用指定的属性创建一种逻辑字体CreateScalableFontResource为一种T
  • ElasticSearch笔记系列(7)——删除文档和删除索引

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 本文介绍删除文档和删除索引的基本方法 本来想把这几篇合成一篇的 xff0c 但最近事情太多 xff0c 好多比较长的文章总是写了一半便束之高阁 xff0c 其中有几篇还日久
  • 经验分享——嵌入式工程师必看书籍(转载)

    从事嵌入式研发行业十年 xff0c 认为学习就是要不断的吸纳知识 xff0c 在研发过程中 xff0c 经常会遇到一些问题 xff0c 这种发现问题并解决问题的过程就是进步 为什么选择学习嵌入式 xff1f 嵌入式系统无疑是当前最热门最有发
  • VS好用系列之代码片段

    背景 xff1a 同学们 xff0c 我们后台写接口 xff0c 有过没这样的困扰 每个接口都需要写这么一串相似的代码 xff0c 正常都是复制粘贴一下 xff0c 如下图代码所示 xff1a 那么我们有没更好 更方便快捷方法 xff0c
  • 在虚拟机里面安装Linux操作系统

    在这篇文章中以VMware14为例 xff0c Linux操作系统采用CentOS7进行讲解如何在虚拟机中安装Linux操作系统 一 选择创建新的虚拟机 二 在选择虚拟机配置界面选择 自定义 高级 选项 xff0c 然后点击 下一步 三 在
  • [译] OpenStack Pike 版本中的 53 个新功能盘点

    原文 xff1a https www mirantis com blog 53 things to look for in openstack pike 作者 xff1a Mirantis Nick Chase 发布日期 xff1a 08
  • vsftp锁定用户在家目录

    vsftpd锁定用户在家目录 1 锁定所有本地用户在家目录 xff1a 更改vsftpd conf配置文件 添加 chroot local user 61 YES 2 锁定列表中的用户在家目录 更改vsftpd conf 添加 chroot
  • 使用cas-overlay-template搭建cas服务器

    背景 在多服务统一帐号的应用集中 xff0c 单点登录是必不可少的 CAS就是成熟的单点登录框架之一 Github地址 https github com apereo cas 现在我们就通过一系列快速简单的构建方式实现一个简单的单点登录系统
  • /var/log目录下的20个Linux日志文件功能详解

    如果愿意在Linux环境方面花费些时间 xff0c 首先就应该知道日志文件的所在位置以及它们包含的内容 在系统运行正常的情况下学习了解这些不同的日志文件有助于你在遇到紧急情况时从容找出问题并加以解决 以下介绍的是20个位于 var log
  • 很喜欢博客园这个平台

    经朋友推荐来到博客园的 xff0c 非常喜欢 希望在这里能学到更多知识 转载于 https www cnblogs com rickons p 4580253 html
  • 被我误解的max_connect_errors

    实为吾之愚见 望诸君酌之 闻过则喜 xff0c 与君共勉 第一节 什么是 span style font size 10pt line height 50 color 000000 border none 1pt max connect e