你们好,我是金金金。
场景
- 启动服务时,报错如上:数据源拒绝建立连接,服务器发送消息:“连接过多”
排查
看报错信息提示的很明显了
docker exec -it mysql bash # 进入mysql容器
mysql -u root -p # 登录mysql
SHOW variables LIKE "%max_connections%"; # 查看最大连接数信息
- max_connections:MySQL数据库服务器的参数,指定了服务器可以同时接受的最大客户端连接数量。如果尝试建立的新连接超过这个限制,服务器将拒绝连接请求。这个参数的默认值通常是150。
mysqlx_max_connections
:这是MySQL数据库服务器的参数,用于控制通过MySQL X协议(用于MySQL的新的高级协议)连接到服务器的最大连接数。MySQL X协议提供了更现代和强大的功能,比如支持异步查询和事务。mysqlx_max_connections指定了服务器可以同时接受的最大MySQL X连接数。如果尝试建立的新连接超过这个限制,服务器将拒绝连接请求。这个参数的默认值通常是100。
SHOW STATUS LIKE 'Threads_connected';
- 很明显,已经超过100了,所以数据源拒绝建立连接
造成error的原因
- 数据库连接过多
解决
有多种解决方案。
重启mysql
服务
- 重启 MySQL 服务会导致所有现有的数据库连接被关闭。当 MySQL 服务器重启时,它会结束所有当前的进程,并清除
SHOW PROCESSLIST;
命令显示的所有线程信息。这意味着所有处于 "Sleep" 状态的线程、正在执行查询的线程,以及其他所有类型的数据库连接都会被终止
修改最大连接数(docker中修改mysql最大连接数及配置文件,因为我mysql是部署在docker容器的)
2.1 临时修改:重启mysql
后就不生效
docker exec -it mysql /bin/bash
mysql -u root -p root
SET GLOBAL max_connections = 200;
2.2 永久修改:重启mysql
后也生效
- 要永久修改
max_connections
的值,需要编辑MySQL的配置文件(通常是my.cnf
或my.ini
,根据你的操作系统和MySQL安装方式而异)
找到MySQL的配置文件。这个文件通常位于以下位置之一:
- 在Unix/Linux系统上:
/etc/my.cnf
,/etc/mysql/my.cnf
, 或~/.my.cnf
- 我这里mysql是在docker容器下的,所以在容器目录内
- 在Windows系统上:通常是MySQL安装目录下的 my.ini
- 我这里是liunx环境,mysql是部署在docker容器的
- 打开配置文件 mysql容器下 /etc/mysql/my.cnf 文件, vi my.cnf文件编辑, 在
[mysqld]
部分下面添加或修改max_connections
的值: - 容器内部默认是没有vim编辑器的,所以需要自己装一下
apt-get install vim
- 修改内容如下
[mysqld]
max_connections = 200
- 保存配置文件并重启MySQL容器以使更改生效。
docker restart mysql
- 然后我们进入mysql容器并且登录mysql 验证测试一下最大连接数是否变成了200,如下图,修改成功!
总结
连接过多,所以被拒绝连接了,我这边采用的方案是扩大最大连接数~
- 编写有误还请大佬指正,万分感谢。