错误
客户出现 MySQL连接数 超过 最大连接数的现象
ERROR 1040 (HY000): Too many connections
出现该现象,一般的解决方法:
1.修改配置文件中的最大连接数,之后重启数据库
2.如果配置文件中没有设置 连接超时时间的参数。8小时后,MySQL系统会自动清除睡眠线程。清除之后,可以连接。
改进
额外连接数
MySQL8.0之后,对于连接数进行改进。拥有 CONNECTION_ADMIN权限 的用户可以有一个额外连接。
验证
动态修改 最大连接数 为3
mysql> set global max_connections=3; --修改最大连接数为3 Query OK, 0 rows affected (0.00 sec)
开启多个端口连接数据库,增大连接数达到最大限制
mysql> show global status like 'threads_connected'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 3 | +-------------------+-------+ 1 row in set (0.01 sec)
继续连接报错
使用root用户连接(root具有 CONNECTION_ADMIN权限 )
连接成功
注意
拥有 CONNECTION_ADMIN权限 的用户只有额外一个连接数。如果在当前的连接基础上 ,再用root用户开启一个新连接依然会报错
管理端口
MySQL8.0.14之后,为了解决连接数限制的问题。新增加了一个管理端口配置。连接数达到最大限制时,使用 管理端口 可以无限制登录,该配置默认是不开启的。
mysql> show global variables like 'admin%'; +------------------------+-----------------+ | Variable_name | Value | +------------------------+-----------------+ | admin_address | | | admin_port | 33062 | | admin_ssl_ca | | | admin_ssl_capath | | | admin_ssl_cert | | | admin_ssl_cipher | | | admin_ssl_crl | | | admin_ssl_crlpath | | | admin_ssl_key | | | admin_tls_ciphersuites | | | admin_tls_version | TLSv1.2,TLSv1.3 | +------------------------+-----------------+ 11 rows in set (0.00 sec)
admin_address 和 admin_port 为管理端口参数。当前处于关闭状态
开启
管理端口参数为只读参数,只能在配置文件中修改
create_admin_listener_thread = 1 --创建一个单独的 listener 线程来监听 admin 的连接请求 admin_address = 127.0.0.1 --监听地址,建议设置为一个固定的 IP 地址 admin_port = 33062 --监听端口,默认为 33062,也可以自定义端口
之后重启数据库
33062管理端口 已经被监测到
root@LAPTOP-FPIQJ438:/usr/local/mysql-8.0# netstat -nlp |grep 33062 tcp 0 0 127.0.0.1:33062 0.0.0.0:* LISTEN 968/mysqld
验证
登录成功