如何配置MySQL的back_log参数应对突发的大量连接请求?

阿明大大_8583

阿明大大_8583

2026-08-10

608人浏览

原创

back_log是tcp监听队列长度,仅缓解连接建立阶段的瞬时洪峰;它不能增加总连接数,也不能解决连接泄漏或max_connections耗尽问题,必须与net.core.somaxconn协同调整才有效。

如何配置mysql的back_log参数应对突发的大量连接请求?

back_log 是什么,它真能缓解连接风暴吗?

不能。back_log 不是“连接池”,也不增加 MySQL 能接受的总连接数。它只控制 TCP 连接请求在进入 MySQL 服务前,能在操作系统内核的 accept 队列里排队等待的长度。当大量新连接瞬间涌来(比如秒杀、定时任务启动),MySQL 还没来得及调用 accept() 处理,这些请求就先堆在队列里——back_log 就是这个队列的上限。

一旦队列满了,新的 SYN 包会被内核直接丢弃,客户端看到的是“Connection refused”或超时,而不是 “Too many connections”。所以它解决的是“连接被拒”的表层现象,不是连接数打满的根本问题。

怎么查和改 back_log?注意系统级限制

MySQL 启动时会读取系统参数 /proc/sys/net/core/somaxconn,并把 back_log 设为该值和配置值中的较小者。也就是说,你配再大也没用,如果系统限制卡死了。

  • 查当前生效值:SHOW VARIABLES LIKE 'back_log';
  • 查系统上限:cat /proc/sys/net/core/somaxconn(Linux)
  • 临时调高系统限制:sudo sysctl -w net.core.somaxconn=2048
  • 永久生效:在 /etc/sysctl.conf 加一行 net.core.somaxconn = 2048,然后 sysctl -p
  • MySQL 配置中设 back_log = 2000(需重启 mysqld 才生效)

注意:back_log 最大只能到系统 somaxconn 的值,超出部分会被静默截断——SHOW VARIABLES 显示的才是真实生效值。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载

为什么调大 back_log 后还是连不上?常见坑点

调了 back_log 却没效果,大概率踩了这三个坑:

  • 没同步调高 somaxconn,MySQL 实际用的还是旧值(比如默认 128)
  • 应用端重试机制太激进,SYN 重传间隔短、次数多,反而加剧队列拥塞
  • 根本问题是应用连接泄漏或连接池爆满,新连接持续打进来,队列永远清不完——这时加 back_log 只是把“立刻拒绝”变成“稍等几秒再拒绝”

典型错误现象:netstat -s | grep -i "listen overflows" 输出非零,说明队列确实溢出了;但同时 Threads_connected 远低于 max_connections,证明不是 MySQL 层打满,而是连接压根没进到 MySQL。

back_log 和 max_connections 到底谁该优先调?

优先看监控数据:

  • 如果 Threads_connected 接近 max_connections → 重点查应用连接泄漏、慢查询阻塞、连接池配置 → 调 max_connections 是次要动作
  • 如果 Threads_connected 很低,但客户端报 Connection refused 或大量超时 → 查 listen overflows 和 somaxconn → back_log 才是关键

两者不是替代关系,而是分层防御:操作系统队列(back_log)兜底接收,MySQL 连接池(max_connections)负责处理。漏掉任何一层,突发流量都会击穿。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2253

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1379

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

815

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

3112

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

5248

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1179

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

5511

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

4822

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

6414

11

热门下载

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

精品课程

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

共1课时 | 188人学习