Connection refused(111)需先确认MySQL服务运行状态及bind_address是否为0.0.0.0或具体IP;Access denied(1045)源于'user'@'host'权限匹配问题,须检查并显式授权;连接池断连需同步调优wait_timeout与连接池空闲配置,并排查防火墙、安全组及SELinux拦截。
Connection refused(111)错误:先确认服务是否真在监听
看到
,第一反应不是改代码,而是确认 MySQL 进程有没有真正跑起来、端口有没有真正“对外敞开”。
或
看一眼状态,如果是
,直接
启动。
但更隐蔽的问题是:服务起来了,却只绑在
。查配置文件(通常是
或
),找到
—— 如果它写着
,那远程根本连不上,哪怕防火墙全开也没用。改成
(允许所有 IP)或具体内网 IP,然后
。
重启后别跳过验证:用
确认监听地址是不是你期望的。如果还显示
,说明配置没生效(常见于多配置文件被覆盖、语法错误导致加载失败)。
Access denied for user(1045):权限是'user'@'host'三元组,不是单看用户名
输对密码还报
?这不是密码错,是账号不存在——MySQL 把
和
当成两个完全独立的账号。登录本地 MySQL 后,执行
,重点看你要连接的那个
值是否存在。
如果目标是远程 IP(比如
),就明确授权:
如果想通配所有内网,用
比
更安全
执行完务必
,否则权限不生效
注意:新版本 MySQL(8.0+)创建用户必须分开
和
,不能合并在一条
里
连接池空闲连接断连:wait_timeout 不只是服务端的事
应用跑着跑着突然报
,但 MySQL 本身一切正常?很可能是连接池里的空闲连接被 MySQL 主动踢掉了。MySQL 默认
是 28800 秒(8 小时),但很多连接池(如 HikariCP、Druid)默认空闲超时更短,且会主动检测并重连;而有些老项目用的 c3p0 或自研池子,可能不会自动重连,一断就卡死。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
解决方向有两个:
服务端调长:在
段加
和
,再重启
客户端适配:检查连接池配置,确保
(如
)开启,且
小于 MySQL 的
别忽略网络设备:中间的 NAT 网关、云厂商 SLB 也可能有连接空闲超时(常为 300–900 秒),这个比 MySQL 层还早断连
防火墙与安全组:两个地方都要放行 3306
Linux 上开了
或
,只加了
不够——还要确认规则是否生效:
。CentOS 7+ 用
的话,记得加
再 reload,否则重启就失效。
更重要的是云环境:阿里云/腾讯云/AWS 的安全组是独立于系统防火墙的。即使服务器内部
全放行,安全组没开 3306 TCP 入方向,照样连不上。检查点有三个:
MySQL 所在机器的安全组:入方向允许来源 IP + 3306 端口
客户端所在机器(如 CVM、跳板机)的安全组:出方向不限制,但若走代理,代理机也要开对应端口
如果跨 VPC 或用了云联网,还得确认对等连接、路由表、ACL 是否放行
最容易被忽略的是 SELinux(RHEL/CentOS):它可能拦截
mysql
d 绑定非标准端口或网络访问,临时关掉测试:
;确认是它导致的,再按策略启用
。
ERROR 2003 (HY000): Can't connect to MySQL server on 'x.x.x.x' (111)systemctl status mysqlsystemctl status mysqldinactivesudo systemctl start mysql127.0.0.1/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnfbind_address127.0.0.10.0.0.0sudo systemctl restart mysqlss -tlnp | grep :3306127.0.0.1:3306Access denied for user 'root'@'192.168.1.100''root'@'localhost''root'@'%'SELECT User, Host FROM mysql.user;Host192.168.1.100GRANT ALL ON *.* TO 'user'@'192.168.1.100' IDENTIFIED BY 'pwd';'user'@'192.168.%.%''user'@'%'FLUSH PRIVILEGES;CREATE USERGRANTGRANTCommunications link failurewait_timeout[mysqld]wait_timeout = 28800interactive_timeout = 28800connection-test-querySELECT 1idle-timeoutwait_timeoutufwfirewalldsudo ufw allow 3306sudo ufw status verbosefirewall-cmd--permanentiptablessudo setenforce 0mysqld_can_network_connect