MySQL 默认连接数

一、MySQL 默认连接数概述

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

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

版本 默认最大连接数 上限值
MySQL 5.0 100 16384
MySQL 5.1 200(小版本不同) 100000
MySQL 5.5/5.6/5.7 151 100000
MySQL 8.0 151 100000

验证方法

sql 复制代码
SHOW VARIABLES LIKE 'max_connections';

三、核心概念与命令详解

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

  • 最大连接数

    sql 复制代码
    SHOW VARIABLES LIKE 'max_connections';
  • 当前活跃连接数

    sql 复制代码
    SHOW STATUS LIKE 'Threads_connected';
  • 连接使用率

    sql 复制代码
    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. 详细连接信息

  • 查看所有连接状态

    sql 复制代码
    SHOW PROCESSLIST;
  • 按用户分组统计连接数

    sql 复制代码
    SELECT user, COUNT(*) AS connections FROM information_schema.processlist GROUP BY user;
  • 空闲连接数

    sql 复制代码
    SELECT COUNT(*) FROM information_schema.processlist WHERE command = 'Sleep';

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

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

  • Linux/Unix/macOS

    修改 /etc/my.cnf/etc/mysql/my.cnf

    ini 复制代码
    [mysqld]
    max_connections = 1000
    wait_timeout = 300
    interactive_timeout = 300
  • Windows

    修改安装目录下的 my.ini

    ini 复制代码
    [mysqld]
    max_connections = 1000
    wait_timeout = 300
  • 重启服务

    bash 复制代码
    # Linux/Unix/macOS
    sudo systemctl restart mysql
    
    # Windows
    net stop MySQL80 && net start MySQL80

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

sql 复制代码
SET GLOBAL max_connections = 1000;

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

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

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
    hikari:
      # 最大连接数
      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 健康检查 SQL SELECT 1

六、连接池监控与 Prometheus 集成

1. 通过 JMX Exporter 监控 HikariCP

配置步骤:
  1. 下载 JMX Exporter

    JMX Exporter GitHub 下载 jmx_prometheus_javaagent-*.jar

  2. 创建配置文件 jmx_config.yaml

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

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

    yaml 复制代码
    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 配置:

    bash 复制代码
    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'; 查看空闲连接
相关推荐
Tapdata3 小时前
全球 DaaS 市场研究报告上线,聚焦数据服务化趋势与行业演进路径
数据库
刘一说5 小时前
资深Java工程师的面试题目(六)数据存储
java·开发语言·数据库·面试·性能优化
江沉晚呤时5 小时前
EventSourcing.NetCore:基于事件溯源模式的 .NET Core 库
java·开发语言·数据库
珹洺5 小时前
数据库系统概论(十九)详细讲解关系查询处理与查询优化
数据库
liulun6 小时前
SQLite官方数据库加密方案
数据库·sqlite
小五Z6 小时前
MySQL--InnoDB存储引擎--架构
数据库·mysql
远方160918 小时前
40-Oracle 23 ai Bigfile~Smallfile-Basicfile~Securefile矩阵对比
数据库·人工智能·sql·oracle·矩阵·database
汪子熙21 小时前
HSQLDB 数据库锁获取失败深度解析
数据库·后端
VvUppppp21 小时前
MYSQL进阶
mysql