导读:本期聚焦于小伙伴创作的《MySQL不能远程连接怎么办?详细排查与解决方法》,敬请观看详情。服务器上的MySQL装好后,本地能登远端却连不上,这种状况常由绑定地址、用户权限与防火墙三方面同时限制导致。MySQL默认只监听127.0.0.1,需改bind-address为0.0.0.0或注释掉;root等用户默认只允许localhost登录,要用CREATE USER与GRANT放开指定IP或全网段访问。云主机还需在安全组放通3306。本文从配置、权限、网络三层给出可落地的修复步骤与验证命令,帮你快速恢复业务系统对数据库的远程读写。

MySQL部署到服务器后,经常会遇到在本地命令行可以登录,但使用笔记本或另一台机器上的程序连接时被拒绝的情况。这个问题通常不是数据库坏了,而是MySQL自身安全策略、系统网络配置共同起作用的结果。要把远程连接打通,需要从服务监听、账号权限、防火墙三处逐一确认。

MySQL不能远程连接怎么办?详细排查与解决方法

一、检查MySQL服务监听地址

MySQL启动后会绑定一个IP地址来监听客户端请求。在多数Linux发行版中,默认配置文件里写了bind-address = 127.0.0.1,意思是只接受本机回环地址的连接。此时即便账号允许远程,TCP层根本收不到外部数据包。

我们需要编辑配置文件,常见路径为/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf。将bind-address改为0.0.0.0表示监听所有网卡,或直接用井号注释该行。修改后必须重启服务才能生效。

# 查看当前监听情况
ss -tlnp | grep 3306

# 编辑配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 找到 bind-address = 127.0.0.1
# 改为 bind-address = 0.0.0.0

# 重启MySQL
sudo systemctl restart mysql

改为0.0.0.0后,任何能访问该服务器3306端口的机器都能建立TCP连接,但是否能登录成功还要看MySQL里的账号授权。生产环境如果只想给固定IP开放,可以在云安全组限制来源,而不必在bind-address上做精细控制。

二、配置用户远程访问权限

MySQL的权限系统把“哪个用户从哪台主机连接”作为授权维度。执行SELECT user,host FROM mysql.user;会看到很多账号的host是localhost,这表示只允许本机连。要让外部IP连入,必须创建host为客户端IP或百分号的账号,并授予库表权限。

下面示例创建一个允许从任意IP连接的用户,并赋予test库全部权限。实际运用中建议写具体IP提升安全性。注意MySQL 8.0之后要先建用户再授权,不能像旧版用GRANT隐式建户。

-- MySQL 8.0 及以上
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON test.* TO 'remote_user'@'%';
FLUSH PRIVILEGES;

-- 限定某IP段(如192.168.1.网段)
CREATE USER 'remote_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT,INSERT,UPDATE ON test.* TO 'remote_user'@'192.168.1.%';
FLUSH PRIVILEGES;

授权后可用SHOW GRANTS FOR 'remote_user'@'%';核对。如果之前用root远程连,官方并不推荐把root的host改成百分号,容易成为攻击入口。独立远程账号配合最小权限原则更稳妥。

三、排查防火墙与云安全组

即便MySQL监听正常、账号有权限,服务器防火墙也可能丢弃3306端口的包。Ubuntu默认用ufw,CentOS常用firewalld。另外云厂商有独立安全组,属于外层虚拟防火墙,两边都要放通。

本地防火墙放通命令如下,云控制台则需在入站规则添加TCP 3306来源IP。排查时可在客户端用telnet或nc测试端口通断,避免盲目改数据库配置。

# ufw 放通
sudo ufw allow 3306/tcp

# firewalld 放通
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

# 客户端测试端口
nc -zv 服务器IP 3306

有时公司网络出口做了限制,从办公网连不上但手机热点可以,这不属于服务端问题。可让运维确认出口策略,或采用SSH隧道方式绕开直连限制,后面会简单说明。

四、使用SSH隧道作为替代方案

如果安全规范要求数据库绝不暴露公网,又需要临时远程维护,SSH隧道是最省事的方案。它在本地和服务器间建立加密通道,把本地端口转发到远端127.0.0.1的3306,对MySQL来说连接仍来自本机。

执行下面命令后,本地程序连127.0.0.1:13306就等于连了服务器MySQL,且不需要改bind-address和授权host。适合运维排查,不适合高并发业务长期用。

ssh -N -L 13306:127.0.0.1:3306 user@服务器IP
# 另一个终端连接
mysql -h 127.0.0.1 -P 13306 -u remote_user -p

隧道方案把认证交给SSH,数据库层压力小,也不会因暴露端口增加被扫风险。但隧道依赖跳板机稳定,断线会让业务连接全部失败,因此仅作补充手段。

五、常见错误与处理

报错ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed to connect说明账号host不匹配,回去检查mysql.user表。报错Can't connect to MySQL server on 'IP' (timed out)一般是防火墙或bind-address问题。认证失败Access denied for user则是密码或权限粒度不对。

推荐按“端口通不通、监听对不对、账号允不允许、密码正不正确”的顺序排错。每改一项就用客户端实测,不要同时改多处导致分不清哪步生效。养成修改前备份配置文件与mysql库的习惯,可避免误操作锁死管理入口。

现象可能原因首要动作
连接超时bind-address限制或防火墙ss查监听,ufw放端口
Host not allowed用户host非客户端IPCREATE USER或改host
Access denied密码错或库权限不足SHOW GRANTS核对

把上述监听、授权、网络三层都打通,MySQL远程连接就能稳定工作。后续可结合SSL加密连接进一步提升传输安全,尤其在跨公网场景下十分必要。

MySQL远程连接授权配置修改时间:2026-08-01 04:03:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。