简述

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,因此这个参数一般不会生效,可以不用设置,或者设置到一点,使用上面的另外两个参数进行限制就可以了。