如何在MySQL中正确配置my.cnf文件以优化基础连接性能?

P粉602998670

P粉602998670

2026-07-22

856人浏览

原创

max_connections应据真实峰值设,如峰值800则设1000(留20%余量),小内存机≤500,16gb可设2000但须同步调大ulimit和somaxconn;wait_timeout与interactive_timeout均设300秒防僵尸连接,skip_name_resolve必须开启。

如何在mysql中正确配置my.cnf文件以优化基础连接性能?

max_connections设多少才不翻车

连接数不是越高越好,设高了反而容易触发 Cannot allocate memory 或被系统 OOM killer 杀掉进程。关键看业务真实并发连接峰值,而不是“怕不够用”就拍脑袋设 5000。

实操建议:

  • 先查历史峰值:SHOW GLOBAL STATUS LIKE 'Threads_connected'; 配合慢日志和监控(如 Prometheus + mysqld_exporter)看 15 分钟内最大值
  • 生产环境建议留 20% 余量:比如峰值是 800,max_connections 设 1000 即可
  • 小内存机器(≤4GB)慎设超过 500;16GB 服务器可设到 2000,但必须同步调大 open_files_limit(至少是连接数的 2 倍)
  • 别忘了操作系统限制:ulimit -n 要 ≥ open_files_limit,否则 MySQL 启动时会静默降级

wait_timeout 和 interactive_timeout 必须配对改

这两个参数控制空闲连接存活时间,设得太大(比如默认 28800 秒 / 8 小时)会导致大量“僵尸连接”堆积,占着 max_connections 名额却不干活,新连接直接被拒。

常见错误现象:Too many connections 报错,但 SHOW PROCESSLIST 里全是 Sleep 状态、Command 列为 Sleep、Time 列几百上千秒。

实操建议:

  • Web 应用场景(PHP/Python/Java 连接池模式):设为 300(5 分钟)足够,连接池本身会保活
  • DBA 手动连接或脚本直连:可设为 28800,避免反复输密码
  • wait_timeoutinteractive_timeout 值必须一致,否则应用行为不可预测(比如某些 JDBC 驱动会按其中较小值判断超时)

skip_name_resolve 关乎连接建立速度

MySQL 默认开启 DNS 反查,每个新连接都会尝试解析客户端 IP 对应的 hostname。一旦 DNS 服务延迟或不可达,连接就会卡在 Connecting to localhost... 状态几秒甚至十几秒。

MySQL(Linux)
MySQL(Linux)

MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。

下载

这个参数只影响连接建立阶段,不影响已建立连接的查询性能,但它是“首因问题”——很多“MySQL 慢”的排查最后都落在它身上。

实操建议:

  • 务必设为 skip_name_resolve = ON(或 1),这是所有生产环境的底线配置
  • 设完后,GRANT 语句里的 HOST 必须用 IP 或 '%',不能再用域名(比如 'app-server.example.com'
  • 验证是否生效:SELECT @@skip_name_resolve; 返回 1 即成功

back_log 不是越大越好,但太小会丢连接

back_log 是 TCP 连接请求队列长度,不是 MySQL 内部连接数。当瞬间大量连接涌来(比如服务刚重启、压测开始),Linux 内核会先把 SYN 请求放这里排队;如果队列满,后续 SYN 直接被丢弃,客户端看到的是“Connection refused”而非“Too many connections”。

它和系统 net.core.somaxconn 有关联,MySQL 启动时取二者最小值作为实际生效值。

实操建议:

  • 默认值 50 完全不够用,尤其在容器或云环境(如 Docker Compose 启动多个应用实例)
  • 设为 back_log = 1024 是较稳妥的选择,配合系统级调整:sysctl -w net.core.somaxconn=2048
  • 不需要为低流量业务刻意调高,但上线前务必检查:用 ss -lnt | grep :3306Recv-Q 是否长期非零,若持续 >0 就说明队列在积压
真正卡住连接性能的,往往不是 max_connections 这种显眼参数,而是 skip_name_resolve 这种一开就见效、不开就默默拖慢每条连接建立的开关。还有就是 back_log 和系统 somaxconn 的配合,很多人只改 MySQL 配置却忘了调内核参数,结果白忙一场。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

2451

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

448

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

614

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3969

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

1345

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

3561

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

3491

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

642

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

526

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 124人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 224人学习

phpEnv手册
phpEnv手册

共0课时 | 0人学习