Debian 上 MySQL 连接超时通常不是单一原因,而是 网络、MySQL 配置、应用端、系统资源 中某一环节导致的。下面按 最常见 → 较少见 的顺序系统说明原因与排查方法。
wait_timeout / interactive_timeout 太短MySQL 默认在 8 小时(28800 秒),但某些 Debian 环境或云镜像被改小。
现象
MySQL server has gone away检查
SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';
解决
SET GLOBAL wait_timeout = 28800;
SET GLOBAL interactive_timeout = 28800;
永久生效(/etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf):
[mysqld]
wait_timeout=28800
interactive_timeout=28800
connect_timeout 太小用于 建立连接阶段,不是空闲超时。
检查
SHOW VARIABLES LIKE 'connect_timeout';
解决
[mysqld]
connect_timeout=20
常见于:
pool_recycle)表现
解决
wait_timeout)iptables -L -n
nft list ruleset
检查端口是否放行
ss -lntp | grep 3306
SHOW VARIABLES LIKE 'bind_address';
如果是:
127.0.0.1
远程连接会直接超时。
解决
[mysqld]
bind-address = 0.0.0.0
并重启:
systemctl restart mysql
MySQL 默认会做 DNS 反向解析。
典型现象
解决
[mysqld]
skip-name-resolve
⚠️ 注意:之后授权只能用 IP,不能用 hostname。
max_connections 已满现象
检查
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';
解决
[mysqld]
max_connections=500
journalctl -u mysql
dmesg | grep -i oom
/var 满df -h
MySQL 无法写 tmp / binlog → 连接失败。
✅ 本地能连吗?
mysql -u root -p -h 127.0.0.1
✅ 远程能连吗?
telnet 服务器IP 3306
✅ 超时发生在:
connect_timeoutwait_timeoutnet_read_timeout / net_write_timeout你可以直接贴出:
mysql --versioncat /etc/debian_version我可以直接帮你给出 最小修改方案。