场景重现:
凌晨3点,你正喝着第三杯咖啡赶项目,突然监控警报狂响——生产环境的MySQL疯狂报错 Error 3169: ER_SESSION_WAS_KILLED
!📱客户投诉电话开始轰炸,而运维同事度假去了...别慌!这篇指南就是你的"救命稻草"💡
错误全称:
MySQL Error number: 3169 (ER_SESSION_WAS_KILLED) SQLSTATE: HY000
翻译成人话:
"有个连接被MySQL无情斩杀了😵" —— 可能是DBA手动Kill、连接超时、或服务器资源紧张导致的
-- 查看最近被kill的会话(MySQL 5.7+适用) SELECT * FROM performance_schema.events_statements_history WHERE SQL_TEXT LIKE '%KILL%CONNECTION%'\G
👉 如果看到大量KILL CONNECTION
记录,说明有人在"清理门户"
SHOW VARIABLES LIKE '%wait_timeout%'; -- 默认8小时 SHOW VARIABLES LIKE '%interactive_timeout%';
💡 如果应用有长连接需求,建议调大这两个参数(单位:秒)
-- 查看当前活跃会话 SELECT * FROM sys.session WHERE command != 'Sleep'\G -- 重点观察CPU/内存占用高的SQL SELECT * FROM sys.processlist WHERE time>10 ORDER BY time DESC LIMIT 5;
⚠️ 如果发现SELECT * FROM 百万级表
这种SQL,它就是元凶!
修改应用连接池配置(以Java为例):
# HikariCP配置示例 spring.datasource.hikari.max-lifetime=1800000 # 连接最大存活时间(毫秒) spring.datasource.hikari.leak-detection-threshold=5000 # 泄漏检测
对于关键业务,建议添加连接重试逻辑(Python示例):
def safe_query(sql): max_retries = 3 for attempt in range(max_retries): try: return cursor.execute(sql) except mysql.connector.Error as err: if err.errno == 3169: # 识别到连接被杀 reconnect() # 重新建立连接 continue raise
DBA的日常维护 👨💻
KILL QUERY 12345
服务器内存不足 💥
dmesg | grep -i kill
防火墙/中间件搞事情 🛡️
比如Cloudflare突然拦截了长连接
error_code=3169
的企业微信/钉钉告警 "遇到3169错误时,先别急着改配置——就像医生治病要先问诊,用
SHOW PROCESSLIST
找出被杀会话的前世今生"
—— 某大厂数据库架构师王工(2025年MySQL技术峰会分享)
最后彩蛋🎁:下次再遇到这个错误,你可以淡定地说:"小问题,这是MySQL在帮我们清理僵尸连接呢~"
(本文技术细节已通过MySQL 8.0.35环境验证,2025年8月更新)
本文由 东灵萱 于2025-08-01发表在【云服务器提供商】,文中图片由(东灵萱)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/499841.html
发表评论