docker-swarm部署的ARM版本的mysql超过最大连接数排查

一、环境信息
mysql 5.7.41 ARM

二、问题特征
每隔一段时间,mysql都会出现“too many connections”报错。出现此报错时,mysql无法连接。

三、原因分析
1、数据库访问量过高;
2、max_connections值过小;
3、连接一直没有被释放。

四、问题排查
1、数据库访问量排查
查看mysql当前连接数量

mysql -uroot -h127.0.0.1 -P3306 -e "show processlist" |wc -l

排查是哪些动作用了这些连接

mysql -uroot -h127.0.0.1 -P3306 -e "show full processlist"

或者

mysql -uroot -h127.0.0.1 -P3306 -e "show full processlist" >/tmp/mysql_error.log

如果你可以直接连接mysql, 可以使用

show full processlist

分析哪些SQL耗时,连接数量过多,可以通过SQL性能调优,修改业务代码逻辑,降低访问数量,提升访问性能。

2、max_connections值过小

SHOW VARIABLES LIKE '%max_connections%';

mysql默认的最大链接数很小,可以根据自己部署的服务器的性能以及业务最大的访问量做调整。

临时设置:

set max_connections = 500

这种方式设置服务重启之后会失效

3、连接一直没有被释放
检查interactive_timeout和wait_timeout的值是否设置的过大
interactive_timeout:一个持续SLEEP状态的线程多久被关闭。线程每次被使用都会被唤醒为activity状态,执行完Query后成为interactive状态,重新开始计时。
wait_timeout:不同在于只作用于TCP/IP和Socket链接的线程,意义是一样的
查询参数值

SHOW GLOBAL VARIABLES LIKE '%timeout%'

如果这两个参数值设置过大,可以修改小一点

SET GLOBAL interactive_timeout = 60;
SET GLOBAL wait_timeout = 60;

这种方式设置服务重启之后会失效

五、docker-swarm部署的arm版本的mysql配置文件挂载
本文所述版本的mysql容器内部配置文件路径:/opt/bitnami/mysql/conf/my.cnf
如果你发现配置文件无论怎么挂载都会报错,可尝试以下方式
方式一:配置
1、准备好mysql配置文件,建议从mysql容器内部粘贴出来
修改好配置,并给配置文件添加权限:chmod 777 服务器上Mysql配置文件全路径以及文件名称

2、在服务器上执行
docker config create mysql-config 服务器上Mysql配置文件全路径以及文件名称

3、修改mysql的docker-compose.yml,增加配置
configs:
- source: mysql-config
target: mysql容器内部配置文件名称

4、重新部署服务

方式二、秘密
1、准备好mysql配置文件,建议从mysql容器内部粘贴出来
修改好配置,并给配置文件添加权限:chmod 777 服务器上Mysql配置文件全路径以及文件名称

2、在服务器上执行
docker secret create mysql-config 服务器上Mysql配置文件全路径以及文件名称

3、修改mysql的docker-compose.yml,增加配置
secrets:
- source: mysql-config
target: mysql容器内部配置文件名称

4、重新部署服务

六、mysql配置文件添加项

[mysqld]
max_connections=500
interactive_timeout=120
wait_timeout=120

七、参考文献
1、https://zhuanlan.zhihu.com/p/684159134
2、https://docs.pingcode.com/ask/31817.html
3、https://blog.51cto.com/u_16099321/7536929

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值