导读:本期聚焦于宋承宪创作的《如何配置mysql网络连接?mysql网络连接配置方法详解》,敬请观看详情。默认安装的MySQL只监听本机回环地址,远程客户端往往连不上,报错111或10061。本文围绕MySQL网络连接配置展开,先讲解bind-address与skip-networking这两个关键参数的含义,演示my.cnf的修改步骤和重启服务的方法,再通过用户授权、host通配符、防火墙端口放行几个环节打通整条链路,并整理常见连接失败的排查思路,最后给出密码加密插件、TLS连接等安全加固建议,帮助你把数据库的网络访问配置得既可用又安全。

MySQL装好之后,很多人发现只能在本机用localhost登录,换一台机器连接就直接被拒绝。这个问题的根源通常不在权限,而在服务端根本没监听外部网卡,或者监听了但账号没有被授权远程访问。要真正打通MySQL的网络连接,需要从配置文件、账号授权、防火墙三个层面依次检查。本文以Linux和Windows环境为例,完整梳理一遍配置流程和排错方法。

如何配置mysql网络连接?mysql网络连接配置方法详解

一、修改配置文件让MySQL监听外部地址

MySQL默认的bind-address通常是127.0.0.1,含义是只接受来自本机回环接口的连接。可以用下面的命令确认当前监听情况:

netstat -anp | grep 3306
# 或者
ss -tlnp | grep mysql

如果输出中显示的是127.0.0.1:3306,说明只监听了本机,远程机器无论怎么连都到不了服务端。此时需要编辑配置文件。Linux下一般是/etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf,Windows下则是在安装目录下的my.ini。找到[mysqld]段落,把bind-address改成服务器的实际网卡地址,或者干脆注释掉这一行让MySQL监听所有网卡:

[mysqld]
# 监听所有网卡的3306端口
bind-address = 0.0.0.0
# 也可以指定具体IP
# bind-address = 192.168.1.100
port = 3306

这里有两个细节需要注意。第一,如果配置文件里出现skip-networking,必须把它注释掉,这个参数会彻底禁用TCP/IP连接,只允许本机socket方式访问,留着它改bind-address是无效的。第二,0.0.0.0表示接受任意网卡的连接,方便但暴露面大,如果服务器有多个网卡,建议绑定内网那块网卡的具体IP,公网网卡就不要监听了。改完之后重启服务:

# Linux (systemd)
systemctl restart mysqld
# 或 Debian/Ubuntu
systemctl restart mysql
# Windows 命令行(管理员权限)
net stop mysql && net start mysql

重启后再次执行ss -tlnp,看到0.0.0.0:3306就说明监听配置生效了。

二、账号授权:允许用户从远程主机登录

监听打通只是第一步,MySQL的账号本身就带有主机限制。比如root@localhost这个账号,只允许从本机登录,远程连过来即使密码正确也会被拒绝。可以在服务器上登录MySQL后执行:

-- 查看账号允许的主机
SELECT user, host FROM mysql.user;

-- 创建一个允许远程访问的账号
CREATE USER 'appuser'@'192.168.1.%' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'192.168.1.%';
FLUSH PRIVILEGES;

host字段的写法有讲究。%代表任意主机,配置最省事但风险也最大;192.168.1.%限定某个网段;也可以写精确的IP或网段。生产环境强烈建议按需收紧,比如应用服务器只有两台,那就分别授权两个IP,而不是图方便用%

如果用的是MySQL 8.0及以上版本,还要留意默认的认证插件。8.0默认使用caching_sha2_password,一些老版本的客户端驱动不支持,会报认证失败的错误。可以单独为该账号改回旧插件:

ALTER USER 'appuser'@'192.168.1.%'
  IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;

另外别忘了用SHOW GRANTS FOR 'appuser'@'192.168.1.%';检查一下权限是否真的授予成功,避免漏掉某条权限导致后续操作报错。

三、防火墙与安全组放行3306端口

前两步都做完还是连不上,大概率是防火墙拦截了。Linux上常用的是firewalldiptables两种:

# firewalld (CentOS/RHEL)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

# Ubuntu的ufw
ufw allow 3306/tcp

# iptables方式
iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT

云服务器还有一层安全组规则,需要到云厂商控制台里放行3306端口,并限制来源IP。安全组不放行的话,系统内部防火墙怎么配都没用,这是云环境排错时最容易忽略的一环。建议来源IP只填应用服务器或办公网出口IP,不要填0.0.0.0/0把数据库直接暴露在公网上。数据库端口暴露公网后,几小时内就会被扫描爆破,风险极高。

客户端侧可以先用telnet 服务器IP 3306mysql -h 服务器IP -u appuser -p测试连通性。如果telnet都不通,问题在网络层或防火墙;telnet通但登录失败,问题在账号授权或密码。

四、常见连接报错排查与安全加固

排错时按报错信息定位效率最高。报Connection refused说明端口没监听或防火墙REJECT,回到第一步检查bind-address;报Host xxx is not allowed to connect说明监听正常,是账号的host限制没放开,回到第二步;报Access denied则是用户名密码错误或认证插件不兼容;报Host is blocked because of many connection errors是因为短时间失败次数太多触发了拦截,执行FLUSH HOSTS;(8.0之前)或mysqladmin flush-hosts即可恢复。

安全方面,远程连接建议再补几层保护。网络层尽量走内网或VPN,不直接暴露公网;账号层用强密码并限制host范围;传输层开启SSL,MySQL 8.0默认生成了证书,在配置文件中加上require_secure_transport = ON可以强制客户端走加密连接;监控层面开启慢查询日志和连接数告警,防止被异常流量拖垮。配置完成后,把整套连接参数记录下来,包括监听地址、账号host规则、防火墙策略,方便后续迁移或审计时快速对照。

mysql网络连接mysql配置远程连接修改时间:2026-09-08 10:34:58

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