上一篇
"王工!生产环境又卡死了!"凌晨3点,你的手机突然疯狂震动,打开监控一看,数据库连接池爆满,一堆"僵死连接"占着茅坑不拉屎...😱 这种场景是不是很熟悉?
别慌!今天我们就来彻底解决MySQL连接超时这个"隐形杀手",让你的数据库像德芙一样纵享丝滑~ 🍫
想象一下餐厅的等位场景:
MySQL默认的8小时等待简直像"永动机",实际业务中我们通常需要更精细的控制。
-- 查看当前设置(单位:秒) SHOW VARIABLES LIKE '%timeout%'; -- 交互式连接超时(如命令行操作) SET GLOBAL interactive_timeout = 1800; -- 30分钟 -- 非交互式连接超时(如JDBC连接) SET GLOBAL wait_timeout = 600; -- 10分钟
📌 黄金法则:这俩参数必须设置相同值,否则会出现玄学问题!
-- 单条SQL最长执行时间(超过自动终止) SET GLOBAL max_execution_time = 30000; -- 毫秒,适用于MySQL 5.7+ -- 锁等待超时(避免死锁僵局) SET GLOBAL innodb_lock_wait_timeout = 50; -- 秒
以常用的Druid连接池为例:
# 连接最大空闲时间(应小于wait_timeout) spring.datasource.druid.max-evictable-idle-time-millis=540000 # 9分钟 # 定期检查开关 spring.datasource.druid.test-while-idle=true
SET GLOBAL wait_timeout = 120; -- 短连接2分钟 SET GLOBAL max_execution_time = 5000; -- 慢查询5秒熔断
SET GLOBAL wait_timeout = 3600; -- 长连接1小时 SET GLOBAL max_execution_time = 3600000; -- 允许1小时长查询
建议每个服务独立配置:
SHOW PROCESSLIST
合理的超时设置就像给数据库装上"智能马桶圈"——既不会让资源白白浪费,又能及时清理不健康连接,按照本文配置后,你会惊喜地发现:
现在就去检查你的MySQL超时设置吧!遇到问题欢迎评论区交流~
本文由 贡秀 于2025-08-01发表在【云服务器提供商】,文中图片由(贡秀)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/506556.html
发表评论