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 刷新主机解除阻塞)的主要内容,如果未能解决你的问题,请参考以下文章