mysql连接出错 mysqladmin flush-hosts 解决方法(mysqladmin 刷新主机解除阻塞)

Posted Crayon Lin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql连接出错 mysqladmin flush-hosts 解决方法(mysqladmin 刷新主机解除阻塞)相关的知识,希望对你有一定的参考价值。

在做redis redlock测试的时候用jmeter发post请求,springboot开始报错 Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’

这个的意思是当一个ip连续多次出现错误后,mysql就会 中断这个ip的连接,抛出mysqladmin flush-host

同一个ip在短时间内产生太多(超过mysql数据库max_connect_errors的最大值)中断的数据库连接而导致的阻塞。

解决方法:

1、修改max_connect_errors数量

1)提高允许的max_connect_errors数量(临时修改)

#修改max_connection_errors的数量为1000
mysql -h 你的ip -P 你的端口 -uroot -p你的密码
set global max_connect_errors=10000;
set global max_connections = 200;
show variables like "max_connections";
show variables like "max_connect_errors";
mysql> set global max_connect_errors=10000;
	   set global max_connections = 200;
Query OK, 0 rows affected (0.04 sec)
Query OK, 0 rows affected (0.04 sec)

mysql> show variables like "max_connections";
	   show variables like "max_connect_errors";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 200   |
+-----------------+-------+
1 row in set (0.06 sec)
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 10000 |
+--------------------+-------+
1 row in set (0.05 sec)

这只是临时修改,重启MySQL后会失效。

2)如果需要永久生效,需要在配置文件中修改才行!

#登陆进入Mysql数据库查看max_connect_errors
mysql -h 你的ip -P 你的端口 -uroot -p你的密码
show variables like '%max_connect_errors%';
#max_connect_errors 默认是10 或 100,修改方法如下:
vim /etc/my.cnf  #mysql配置文件路径,根据自己的改;windows打开my.ini文件添加,docker进入容器修改同linux后重启容器
max_connect_errors=10000	#添加这一行直接拉满
#重启MySQL,修改才会生效!
#linux
service mysqld restart  
/etc/init.d/mysqld restart
#windows 
net stop mysql #(mysql是服务名)
net start mysql
#docker
docker restart 容器id

2、使用mysqladmin flush-hosts 清理hosts文件

使用mysqladmin flush-hosts 命令清理一下hosts文件
如果不知道mysqladmin在哪个目录下,可以使用命令查找:which mysqladmin

/usr/bin/mysqladmin flush-hosts -h 你的ip -P 你的端口 -uroot -p你的密码
#配置有master/slave主从数据库的要把主库和从库都修改一遍的
#在数据库中进行,执行命令如下:
flush hosts;

怎么实时查看mysql当前连接数

如何实时查看mysql当前连接数?

如何实时查看mysql当前连接数? 

1、查看当前所有连接的详细资料:
./mysqladmin -uadmin -p -h10.140.1.1 processlist


2、只查看当前连接数(Threads就是连接数.):
./mysqladmin  -uadmin -p -h10.140.1.1 status


、查看当前所有连接的详细资料:
mysqladmin -uroot -proot processlist
D:\MySQL\bin>mysqladmin -uroot -proot processlist
+-----+------+----------------+---------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+----------------+---------+---------+------+-------+------------------+
| 591 | root | localhost:3544 | bbs | Sleep | 25 | | |
| 701 | root | localhost:3761 | | uery | 0 | | show processlist |
+-----+------+----------------+---------+---------+------+-------+------------------+
2、只查看当前连接数(Threads就是连接数.):
mysqladmin -uroot -proot status
D:\MySQL\bin>mysqladmin -uroot -proot status
Uptime: 2102 Threads: 3 Questions: 15531 Slow queries: 0 Opens: 0 Flush tab
les: 1 Open tables: 61 Queries per second avg: 7.389
3、修改mysql最大连接数:
打开my.ini,修改max_connections=100(默认为100)。


今天有一台mysql服务器突然连接数暴增,并且等待进程全部被锁...因为问题解决不当,导致被骂...OTL

总结:以后要快速定位错误,布置解决方案

登录到mysql客户端后,使用status命令也能获得thread连接数以及当前连接的id

或者用

show full processlist 

看一下所有连接进程,注意查看进程等待时间以及所处状态 是否locked

如果进程过多,就把进程打印下来,然后查看

mysql -e show full processlist; > 111

查找非locked的进程,一般就是当前执行中卡死,导致后面的进程排队的原因。

另外,修改mysql最大连接数的方法:

编辑MySQL(和PHP搭配之最佳组合)配置文件 
my.cnf 或者是 my.ini

在[MySQL(和PHP搭配之最佳组合)d]配置段添加:
max_connections = 1000

保存,重启MySQL(和PHP搭配之最佳组合)服务。

然后用命令:
MySQL(和PHP搭配之最佳组合)admin -uroot -p variables 
输入root数据库账号的密码后可看到 
| max_connections | 1000 |


查看MySQL连接数和当前用户Mysql连接数


先用管理员身份进入mysql提示符。
#mysql -uroot -pxxxx
mysql> show processlist; 可以显示前100条连接信息 show full processlist; 可以显示全部。随便说下,如果用普通账号登录,就只显示这用户的。注意命令后有分号。

如果我们想查看这台服务器设置。 #vi /etc/my.cnf
set-variable=max_user_connections=30 这个就是单用户的连接数
set-variable=max_connections=800 这个是全局的限制连接数

 

以上是关于mysql连接出错 mysqladmin flush-hosts 解决方法(mysqladmin 刷新主机解除阻塞)的主要内容,如果未能解决你的问题,请参考以下文章

如何实时查看mysql当前连接数

批量杀死mysql连接

怎么实时查看mysql当前连接数

如何修改连接mysql的用户名和密码

mysql 修改root密码出错了 use mysql update user set

连接MySQL报 unblock with 'mysqladmin flush-hosts' 问题解决