作者:杨涛涛
资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
恰好前些日子和一客户讨论 MySQL 连接数满的问题:ERROR 1040 (HY000): Too many connections
从实践意义来讲,连接数满属于老问题, 此问题产生的原因可能有以下几种:
1. 应用端不习惯受限制的用户权限,沉迷于使用 ALL 权限用户。
2. DBA 为了省事儿,建立多个 ALL 权限用户,分配给开发、运维等。
3. MySQL 数据库服务端没有使用连接池(类似 MySQL 企业版连接池插件),越来越多的数据库请求堆积导致连接满。
4. 应用端和 MySQL 端之间也没有部署连接池,用直连 MySQL 的方式处理日常业务,进而数据库请求过多导致连接满。
5. MySQL 参数 max_connections 设置不合理,与当前数据库请求存在较大偏差,导致连接不够用报错。
如果按照业务功能细分为不同权限的用户,只保留一个管理员用户,在这个问题暴露时管理员就可以使用预留连接进入数据库查看具体问题。MySQL 默认给管理员预留一个额外连接,用于处理连接满的场景;但是现实场景并非如此,大部分 MySQL

本文介绍了MySQL8.0的连接管理接口如何帮助DBA在连接数满的情况下解决问题。通过创建具有service_connection_admin权限的用户,即使max_connections设置较小,也能预留额外连接。此外,文章还提出了优化用户权限、限流和SQL优化等避免连接满的根本解决方案。
最低0.47元/天 解锁文章
2553

被折叠的 条评论
为什么被折叠?



