MySQL - 连接限制
简述
MySQL 每个连接都是消耗一些资源的,因此都会有限制连接的上限,放置数据库被拖垮。
max_connections
这个参数是限制整个 MySQL 服务最大的连接数,部分用户,只要连接数达到就会不会产生新的连接。
如果尝试连接会报错,“Too mamny connections"的报错。
这个参数可以动态修改
set global max_connections = 3000;
配置文件里面配置,在 mysqld 配置节中
max_connections = 3000
max_user_connections
这个参数是限制每个用户的 session 连接个数,如果为 0 表示不限制。如果连接的 session 超过这个参数的限制,会报一下的错误:
ERROR 1203 (42000): User XXX already has more than 'max_user_connections' active connections
set gblobal max_user_connections=100;
配置文件里面配置,在 mysqld 配置节中
max_user_connections = 100
max_connect_errors
这个参数是 mysql 服务器连续接收到了来自于同一个主机的请求,且这些连续的请求全部都没有成功的建立连接就被断开了,当这些连续的请求的累计值大于 max_connect_errors 的设定值时,mysql 服务器就会阻止这台主机后续的所有请求。
Mysql 服务器会在内存里管理一个 host cache,host cache 里保存了一些客户端的 ip 地址,主机名,以及这个客户端在与 server 建立连接时遇到的一些错误信息,host cache 对不是本地的 TCP 连接才有效,所以 host cache 对 127.0.0.1 或者::1 是无效的,并且对于 Unix socket file、named pipe 以及 shared memory 方式建立的连接也是无效的。
出现了错误提示:
ERROR 1129 (HY000): Host 'xxx.xxx.xxx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
就是这个参数引起的。
mysqladmin flush-hosts 可以修复这个报错,但是现在一般有设置 skip_name_resolve,因此这个参数一般不会生效,可以不用设置,或者设置到一点,使用上面的另外两个参数进行限制就可以了。
- 原文作者:Linux运维菜
- 原文链接:https://www.opcai.top/post/2019/2019-03/mysql_connection/
- 版权声明:本作品采用进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。