当前位置: 首页 > news >正文

MySQL 默认连接数

一、MySQL 默认连接数概述

MySQL 的 max_connections 是数据库服务器允许的最大并发连接数,直接影响系统性能和资源利用率。

二、MySQL 默认连接数的版本差异

版本默认最大连接数上限值
MySQL 5.010016384
MySQL 5.1200(小版本不同)100000
MySQL 5.5/5.6/5.7151100000
MySQL 8.0151100000

验证方法

SHOW VARIABLES LIKE 'max_connections';

三、核心概念与命令详解

1. 查看当前连接数与配置

  • 最大连接数
    SHOW VARIABLES LIKE 'max_connections';
    
  • 当前活跃连接数
    SHOW STATUS LIKE 'Threads_connected';
    
  • 连接使用率
    SELECT (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Threads_connected') AS current_connections,(SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'max_connections') AS max_connections,ROUND((SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Threads_connected') / (SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'max_connections') * 100, 2) AS connection_usage_rate;
    

2. 详细连接信息

  • 查看所有连接状态
    SHOW PROCESSLIST;
    
  • 按用户分组统计连接数
    SELECT user, COUNT(*) AS connections FROM information_schema.processlist GROUP BY user;
    
  • 空闲连接数
    SELECT COUNT(*) FROM information_schema.processlist WHERE command = 'Sleep';
    

四、连接数调整的实战方法

1. 通过配置文件永久修改

  • Linux/Unix/macOS
    修改 /etc/my.cnf/etc/mysql/my.cnf

    [mysqld]
    max_connections = 1000
    wait_timeout = 300
    interactive_timeout = 300
    
  • Windows
    修改安装目录下的 my.ini

    [mysqld]
    max_connections = 1000
    wait_timeout = 300
    
  • 重启服务

    # Linux/Unix/macOS
    sudo systemctl restart mysql# Windows
    net stop MySQL80 && net start MySQL80
    

2. 动态调整(临时生效)

SET GLOBAL max_connections = 1000;

五、连接池优化:HikariCP 的 YML 配置详解

在 Spring Boot 项目中,HikariCP 是默认的连接池实现。以下是一个完整的 application.yml 配置示例:

spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: passwordhikari:# 最大连接数maximum-pool-size: 20# 最小空闲连接minimum-idle: 5# 连接超时时间(毫秒)connection-timeout: 30000# 空闲连接超时时间(毫秒)idle-timeout: 600000# 连接最大存活时间(毫秒)max-lifetime: 1800000# 连接健康检查connection-test-query: SELECT 1# 预热连接数initialization-fail-timeout: 1# 自动提交auto-commit: true# 池大小调整的等待时间(毫秒)pool-name: MyHikariPool

3. 关键参数说明

参数名说明推荐值
maximum-pool-size最大连接数20~100(业务决定)
minimum-idle最小空闲连接数5~10
connection-timeout连接超时时间(毫秒)30000
idle-timeout空闲连接超时时间(毫秒)600000
max-lifetime连接最大存活时间(毫秒)1800000
connection-test-query健康检查 SQLSELECT 1

六、连接池监控与 Prometheus 集成

1. 通过 JMX Exporter 监控 HikariCP

配置步骤:
  1. 下载 JMX Exporter
    从 JMX Exporter GitHub 下载 jmx_prometheus_javaagent-*.jar

  2. 创建配置文件 jmx_config.yaml

    rules:
    - pattern: "com.zaxxer.hikari<type=Pool>(?<poolName>[^:]+):(?<attributeName>.+)"name: "hikaricp_${poolName}_${attributeName}"type: GAUGEhelp: "Metrics from HikariCP connection pool"
    
  3. 启动应用时加载 JMX Exporter

    java -javaagent:/path/to/jmx_prometheus_javaagent.jar=12345:/path/to/jmx_config.yaml -jar your-app.jar
    
  4. Prometheus 配置抓取目标

    scrape_configs:
    - job_name: 'hikaricp'static_configs:- targets: ['localhost:12345']
    

2. Grafana 面板指标

  • 活跃连接数hikaricp_HikariPool_activeConnections
  • 空闲连接数hikaricp_HikariPool_idleConnections
  • 等待线程数hikaricp_HikariPool_threadsAwaitingConnection
  • 总连接数hikaricp_HikariPool_totalConnections

七、高并发场景下的连接管理策略

1. Web 应用场景

  • 问题:高并发下连接数耗尽。
  • 解决方案
    • 连接池 + 缓存:减少直接数据库访问(如 Redis 缓存高频数据)。
    • 读写分离:通过主从复制分担写压力。
    • 异步任务:复杂操作通过队列(如 Kafka)异步处理。

2. 数据分析场景

  • 需求:短时间大量复杂查询。
  • 优化策略
    • 限制单次查询连接数:设置 max_connections_per_hour
    • 批处理:合并多个查询为批量操作。

八、常见问题与解决方案

1. 错误:Too many connections

  • 原因:达到 max_connections 限制。
  • 解决方法
    1. 增加 max_connections
    2. 优化连接池配置(减少空闲连接)。
    3. 使用连接池 + 异步处理。

2. 连接泄漏

  • 现象:连接未释放导致资源浪费。
  • 解决方案
    • 代码规范:使用 try-with-resources 自动关闭资源。
    • 设置超时:合理配置 wait_timeoutidle-timeout

九、扩展知识:MySQL 连接数调优

1. 资源限制检查

  • 内存消耗:每个连接需分配线程和缓存,增加 max_connections 会显著增加内存占用。
  • 操作系统限制:检查 ulimit 配置:
    ulimit -n  # 查看当前限制
    ulimit -n 65535  # 临时修改限制
    

2. 连接池性能调优

  • 预热连接:启动时预先创建部分连接,减少首次请求延迟。
  • 动态扩容:根据负载动态调整连接池大小(需结合监控系统)。

十、总结

1. 总结

  • 默认值:MySQL 5.5+ 默认为 151,需根据业务需求调整。
  • 调整方法:优先通过配置文件修改,结合 HikariCP 优化。
  • 监控:定期检查 Threads_connectedSHOW PROCESSLIST

2. Java 开发最佳实践

  • 连接池配置:使用 YML 格式统一管理,避免硬编码。
  • 资源管理:使用 try-with-resources 自动关闭连接。
  • 监控集成:通过 Prometheus + Grafana 实时监控连接池状态。

十一、附录:常用命令速查表

命令功能
SHOW VARIABLES LIKE 'max_connections';查看最大连接数配置
SHOW STATUS LIKE 'Threads_connected';查看当前活跃连接数
SHOW PROCESSLIST;查看所有连接的详细信息
SET GLOBAL max_connections = 1000;临时调整最大连接数
SELECT * FROM information_schema.processlist WHERE command = 'Sleep';查看空闲连接
http://www.lryc.cn/news/571191.html

相关文章:

  • .sstop勒索加密数据库恢复---惜分飞
  • 从电商平台下载数据的项目经验分享 (part 1)
  • 前后端拦截器+MDC实现纯数字 traceId 全链路日志追踪(axios + Spring Boot 超详细实战)
  • DeepSeek 大型 MoE 模型大规模部署压测学习
  • FlinkCDC-Hudi数据实时入湖原理篇
  • JVM监控的挑战:Applications Manager如何提供帮助
  • Spring Boot集成Kafka全攻略:从基础配置到高级实践
  • 多模态大语言模型演进:从视觉理解到具身智能的技术突破
  • Linux运维新人自用笔记(部署 ​​LAMP:Linux + Apache + MySQL + PHP、部署discuz论坛)
  • 5.安装IK分词器
  • ELK在Java的使用
  • Selenium(选择元素,浏览器/元素操作,等待,页面交互)
  • Windows Python 环境管理终极对比:极简方案 VS 传统方案(仅需 2 个软件实现全流程自动化)
  • Selenium(多窗口,frame,验证码,截图,PO模式)
  • rockx读取单张图片并检测图片内人脸的矩形
  • vite的常用配置
  • 「动态规划::数位DP」统计数字递推 / LeetCode 3352|1012(C++)
  • 线程池(Thread Pool)详解
  • 基于Cesium移动的天空云
  • 【Docker基础】Docker核心概念:命名空间(Namespace)之IPC详解
  • 根据Python模块的完整路径import动态导入
  • 05_MinIO+Java SpringBoot 实现透传代理下载
  • 如何确定驱动480x320分辨率的显示屏所需的MCU主频
  • 为何前馈3DGS的边界总是“一碰就碎”?PM-Loss用“3D几何先验”来解
  • Mac 安装JD-GUI
  • 低轨导航 | 低轨卫星导航PNT模型,原理,公式,matlab代码
  • 软件工程:流程图如何画?
  • Python 爬虫入门 Day 5 - 使用 XPath 进行网页解析(lxml + XPath)
  • springboot使用kafka
  • Jmeter的三种参数化方式详解