MySQL运维实战(2.1) 登录失败次数太多导致主机被锁住的问题处理

本文主要是介绍MySQL运维实战(2.1) 登录失败次数太多导致主机被锁住的问题处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:俊达

引言

当我们在使用 MySQL 时,可能遇到过如下类似的错误:

Host 'IP' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

该错误意味着 mysqld 已从给定主机收到许多中断的连接请求。并且数量超过了max_connect_errors系统变量的值。

1 参数max_connect_errors

MySQL有参数max_connect_errors,当一个主机尝试登录MySQL,失败的次数超过了max_connect_errors,则这个主机将无法登录到mysql。

下面是一个简单的测试:

### max_connect_errors 设置成3
mysql> show variables like '%max_connect_errors%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 100   |
+--------------------+-------+
1 row in set (0.00 sec)mysql> set global max_connect_errors=3;
Query OK, 0 rows affected (0.00 sec)mysql> show variables like '%max_connect_errors%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 3     |
+--------------------+-------+### 模拟登陆失败(访问3306端口)
[root@box1 ~]# telnet 172.16.20.51 3306
Trying 172.16.20.51...
Connected to 172.16.20.51.
Escape character is '^]'.
J
5.7.32Qm>IHUJd>++[103(Nmysql_native_password!#08S01Got packets out of orderConnection closed by foreign host.### 重试3次后,无法登陆数据库
[root@box1 ~]# telnet 172.16.20.51 3306
Trying 172.16.20.51...
Connected to 172.16.20.51.
Escape character is '^]'.
jHost '172.16.20.51' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'Connection closed by foreign host.#### 提供正确的密码也无法登录MySQL
[root@box1 ~]# mysql -uauser -h172.16.20.51 -pauser
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1129 (HY000): Host '172.16.20.51' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'### 执行mysqladmin flush-hosts后,可以登陆
[root@box1 ecdsa]# mysqladmin -uroot -h127.0.0.1 -phello flush-hosts

客户端连接错误信息记录在information_schema.host_cache表,mysql服务端会从这个表读取数据,获取主机登陆信息。mysqladmin flush-hosts的作用是清空这个表。

mysql> select * from performance_schema.host_cache\G
*************************** 1. row ***************************IP: 172.16.20.51HOST: box1HOST_VALIDATED: YESSUM_CONNECT_ERRORS: 3COUNT_HOST_BLOCKED_ERRORS: 2COUNT_NAMEINFO_TRANSIENT_ERRORS: 0COUNT_NAMEINFO_PERMANENT_ERRORS: 0COUNT_FORMAT_ERRORS: 0COUNT_ADDRINFO_TRANSIENT_ERRORS: 0COUNT_ADDRINFO_PERMANENT_ERRORS: 0COUNT_FCRDNS_ERRORS: 0COUNT_HOST_ACL_ERRORS: 0COUNT_NO_AUTH_PLUGIN_ERRORS: 0COUNT_AUTH_PLUGIN_ERRORS: 0COUNT_HANDSHAKE_ERRORS: 5COUNT_PROXY_USER_ERRORS: 0COUNT_PROXY_USER_ACL_ERRORS: 0COUNT_AUTHENTICATION_ERRORS: 0COUNT_SSL_ERRORS: 0COUNT_MAX_USER_CONNECTIONS_ERRORS: 0
COUNT_MAX_USER_CONNECTIONS_PER_HOUR_ERRORS: 0COUNT_DEFAULT_DATABASE_ERRORS: 0COUNT_INIT_CONNECT_ERRORS: 0COUNT_LOCAL_ERRORS: 0COUNT_UNKNOWN_ERRORS: 0FIRST_SEEN: 2021-04-06 09:17:05LAST_SEEN: 2021-04-06 09:18:40FIRST_ERROR_SEEN: 2021-04-06 09:17:16LAST_ERROR_SEEN: 2021-04-06 09:18:40
1 row in set (0.00 sec)

2 问题处理

1、验证链接
检查网络连接以确保您的主机不存在 TCP/IP 连接问题。
2、刷新缓存
mysqladmin flush-hosts命令清除缓存

[root@box1 ecdsa] mysqladmin -uroot -h127.0.0.1 -phello flush-hosts

3、调整max_connect_error参数
可以运行以下查询

mysql> set global max_connect_errors=10000;
Query OK, 0 rows affected (0.00 sec)

3 总结

当一个主机连续登录mysql失败的次数超过max_connect_errors后,将无法再次登录数据库。这些错误次数会按照主机的维度记录在performance_schema.host_cache表中。然而,如果在一个主机达到max_connect_errors之前,出现了一次成功的登录,系统会将该主机的错误计数重置为0。为了重置错误次数,我们可以使用mysqladmin flush-hosts命令。
针对运维的需求,我们可以考虑适当调大max_connect_errors的值,以提高系统的灵活性和容错性。通过调整这个参数,我们可以更好地管理数据库的连接请求,确保主机在尝试连接失败后仍有机会成功登录。这样,我们可以更有效地进行运维管理,确保数据库的稳定性和可靠性。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

这篇关于MySQL运维实战(2.1) 登录失败次数太多导致主机被锁住的问题处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/566503

相关文章

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更