暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

MySQL"too many connections to mysql router" 报错

1. 问题现象

应用连接mysqlrouter报错:连接到router的连接超过了router配置

image.png

2. 问题排查

2.1 版本说明

mysql:8.0.39
mysqlrouter:8.0.39

2.2 架构说明

image.png

2.3 检查router日志

image.png

mysql router 参数文件未配置max_total_connections,该参数8.0.27增加,如未配置则使用默认512,导致router实际生效连接数比预期小很多,不符合应用预先配置的连接数产生了报错;

3. 问题原因

  1. 未配置全局参数 max_total_connections
  • 该参数在 MySQL Router 8.0.27 版本新增,用以设置Router实例的全局总连接数上限

  • 默认值为512,若未显式配置,当应用连接数超过此阈值时即触发"Too many connections"错误。

  1. 局部路由配置 max_connections 与全局参数冲突
  • 文档日志中显示类似警告:

    WARNING: [routing:xxx] max_connections(10240) > max_total_connections(512). no effect.
    
    复制
  • 单独在某个路由配置(如 [routing:读写组] )中设置的 max_connections 高于全局限制时,参数会被全局限制覆盖而导致实际生效值低于预期

image.png

4. 解决方案

  1. 新增全局连接限制配置
    在MySQL Router的配置文件(如 mysqlrouter.conf )的 [DEFAULT] 段添加:
[DEFAULT]
# 全局总连接数 = 应用连接数预估峰值 + 冗余
max_total_connections = 10240
复制
  1. 校准路由组配置
    确保每个路由组(如 [routing:读写组])的 max_connections 参数不高于 max_total_connections:
[routing:读写组]
bind_address = 0.0.0.0:6446
destinations = metadata-cache://mycluster/default?role=PRIMARY
routing_strategy = round-robin
# 单路由允许的最大连接数 ≤ 全局总连接数
max_connections = 5000
复制
  1. 重启Router生效
mysqlrouter -c /path/to/mysqlrouter.conf --user=mysqlrouter --reload
复制

5. 注意事项

  1. 系统资源限制
  • 从 MySQL Router 8.0.22 开始,理论支持5万+连接,但实际受限于:
    • 操作系统的 poll() 或 epoll 文件描述符上限(需调整/etc/security/limits.conf)。

    • CPU核心数(建议 [IO] threads 配置为物理核数的2倍)。

  1. 全局与局部优先级
  • max_total_connections(全局) > max_connections(路由级)
    即使某路由设定了高连接数,全局限制仍会生效,需同步调整。
  1. 生产环境验证
    部署前通过压力测试工具(如 sysbench )模拟真实负载,观察日志是否有连接溢出警告:
tail -f /var/log/mysqlrouter/mysqlrouter.log | grep "max_total_connections"
复制
最后修改时间:2025-03-25 09:56:00
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论