局域网访问MySQL数据库服务器的核心方法是:在MySQL配置中开启远程访问权限,为数据库用户授权允许指定IP连接,并确保服务器防火墙放行3306端口。 本文将按照实际排查顺序,从配置文件修改、用户授权、防火墙设置、客户端连接验证到常见故障逐步拆解,帮助你在一台内网机器上顺利连上另一台机器的MySQL。
修改MySQL配置文件开启远程监听
MySQL默认只在本地回环地址(127.0.0.1)上监听连接,外部机器自然无法访问,要允许局域网设备连接,第一步是修改MySQL的监听地址。
找到配置文件并修改bind-address
不同操作系统下,MySQL配置文件的位置略有差异:
- Linux(Ubuntu/Debian):
/etc/mysql/mysql.conf.d/mysqld.cnf - Linux(CentOS/RHEL):
/etc/my.cnf或/etc/my.cnf.d/mysql-server.cnf - Windows:
安装目录/my.ini
打开配置文件后,找到 bind-address 这一行,默认值是 0.0.1,请将其修改为:
bind-address = 0.0.0.0
0.0.0 表示监听所有网络接口,包括局域网IP,如果你只想允许特定IP访问,也可以填服务器实际的局域网IP,168.1.100,行业共识认为,在可信内网环境中使用 0.0.0 已经足够,但若想更收紧安全边界,指定具体IP更好。
修改后重启MySQL服务
配置改动不会立即生效,需要重启数据库服务:
# Linux系统 sudo systemctl restart mysql # Ubuntu/Debian sudo systemctl restart mysqld # CentOS/RHEL # Windows系统 net stop mysql net start mysql
重启后,可以用以下命令确认MySQL是否已监听所有地址:
netstat -tlnp | grep 3306
如果看到 0.0.0:3306 或 ::3306,说明监听设置已生效,这一步是局域网能否访问的基础,如果监听地址没改,后续所有配置都是白费。
创建远程访问用户并授权
即使MySQL开始监听3306端口,默认的root用户通常只允许从localhost登录,你需要为局域网访问创建专用账号,或者临时为现有用户开通远程权限。
使用SQL语句授权远程用户
进入MySQL命令行:
mysql -u root -p
然后依次执行以下SQL语句:
CREATE USER 'lan_user'@'192.168.1.%' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON . TO 'lan_user'@'192.168.1.%'; FLUSH PRIVILEGES;
'192.168.1.%'表示允许来自168.1.1到168.1.254的客户端连接, 是通配符,如果你只希望一台机器连接,就写完整的IP,如'lan_user'@'192.168.1.50'。IDENTIFIED BY后面的密码建议使用强密码,至少12位,包含大小写字母、数字和特殊符号。GRANT ALL PRIVILEGES授权了所有数据库的完整权限,实际生产中建议按需授权,例如只授权某个业务库:GRANT ALL PRIVILEGES ON mydb. TO 'lan_user'@'192.168.1.%';
检查用户权限是否生效
执行以下命令查看用户授权情况:
SELECT user, host FROM mysql.user;
确认 lan_user 对应的host不是你之前设置的 localhost,而是 168.1.% 或者具体的IP,如果host显示为 ,则所有IP都允许连接,安全性较低,不建议在非受信环境使用。
关于root用户远程连接
很多人会问局域网怎么访问mysql数据库服务器时,直接尝试用root连,MySQL的root用户默认绑定localhost,虽然可以修改,但风险很高,行业共识认为,root只应保留在服务器本机使用,远程访问用专门授权的最小权限账号更安全,如果你必须使用root,可以执行:
ALTER USER 'root'@'%' IDENTIFIED BY 'NewPassword';
但这仅建议在完全可信的内网测试环境中操作,生产环境绝对不要这样做。
配置防火墙和网络策略
MySQL端口和用户权限都配好了,但局域网其他设备仍然连不上,多数情况下是防火墙拦住了3306端口,不同系统的防火墙配置方式不同,下面分别说明。
Linux防火墙(ufw和firewalld)
Ubuntu/Debian使用ufw时:
sudo ufw allow from 192.168.1.0/24 to any port 3306 sudo ufw reload
CentOS/RHEL使用firewalld时:
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=3306 protocol=tcp accept' sudo firewall-cmd --reload
允许整个局域网网段访问3306,如果你不想开放整个网段,可以替换为具体的客户端IP。
Windows防火墙
Windows系统下,在“高级安全Windows Defender防火墙”中新建入站规则:
- 规则类型选择“端口”
- 协议选择TCP,特定本地端口填3306
- 操作选择“允许连接”
- 作用域中设置远程IP地址范围,
168.1.0/24 - 配置文件勾选“专用”即可
完成后,防火墙规则会立即生效,不需要重启。
确认3306端口在局域网内可达
在另一台局域网机器上,使用telnet或nc检测端口连通性:
telnet 192.168.1.100 3306 nc -zv 192.168.1.100 3306
如果连接成功,会看到类似 Connected to 192.168.1.100 的提示,如果提示超时或拒绝连接,问题仍出在监听地址或防火墙。
使用客户端工具连接测试
完成上述步骤后,就可以在局域网内的其他电脑上尝试连接MySQL了,常见连接方式有命令行和图形化工具两种。
命令行方式连接
在客户端机器上安装MySQL客户端:
mysql -h 192.168.1.100 -P 3306 -u lan_user -p
输入密码后,如果进入MySQL命令行,说明连接成功。-h 指定服务器IP,-P 指定端口,-u 指定用户名。
图形化工具连接
比较常用的MySQL图形化客户端包括:
- Navicat for MySQL:功能全面,支持连接管理、数据同步、结构对比,属于商用付费软件
-
DBeaver
:开源免费,支持多数据库,跨平台 - MySQL Workbench:MySQL官方出品的免费工具,适合做数据库管理和开发
连接时填写以下信息:
- 主机名或IP地址:服务器局域网IP(如
168.1.100) - 端口:3306
- 用户名:
lan_user - 密码:授权时设置的密码
如果连接报错,优先检查上面三个环节:服务器是否监听3306、用户授权是否包含客户端IP、防火墙是否放行。
连接报错代码对照
| 报错代码 | 提示信息 | 常见原因 |
|---|---|---|
| 2003 | Can’t connect to MySQL server | 网络不通、防火墙未放行、MySQL未监听3306 |
| 1045 | Access denied for user | 用户名密码错误、客户端IP不在授权host范围内 |
| 1130 | Host is not allowed to connect | 用户host设置为localhost,未授权远程IP |
| 2013 | Lost connection to MySQL server | 网络不稳定、MySQL连接超时、跳板机或代理干扰 |
其中1130错误最常见,解决办法就是执行本文前面提到的授权SQL,将客户端IP加入host范围。
局域网访问MySQL的典型应用场景
不同场景下局域网访问MySQL的配置思路大致相同,但细节上有区别,下面梳理三种常见的实际场景。
开发团队共享数据库
多个开发人员在各自电脑上连同一台内网开发机上的MySQL,这种情况下,建议给每个人分配独立账号,不要所有人共用同一个账号,在授权时,可以将host统一设置为开发网段,168.1.%,方便新同事加入时无需改配置,将每个开发者的权限限制在业务数据库范围内,避免误操作删除其他库的数据。
内网业务系统连接数据库
公司内部部署的Web系统或内部工具需要从应用服务器连接MySQL,无需为每台应用服务器单独授权,如果应用服务器IP固定,使用 'app_user'@'192.168.2.15' 精确授权;如果应用服务器使用DHCP但网段固定,也可以使用 'app_user'@'192.168.2.%',端口方面,如果业务并发高,建议在MySQL配置中适当调大 max_connections 值,防止连接数不够。
局域网内临时数据共享
偶尔需要给同事共享一份MySQL中的数据,不必开放root账号,创建临时用户、授权指定库、设置短期密码即可,数据导出完毕后,删除临时用户并撤销授权,MySQL支持以下操作快速清理:
DROP USER 'temp_user'@'192.168.1.%'; FLUSH PRIVILEGES;
常见问题和排查思路汇总
配置完成后连不上,不要盲目重试,按以下顺序逐项排查,能在最短时间内定位问题。
先检查MySQL监听状态
在服务器上执行:
netstat -tlnp | grep mysql ss -tlnp | grep 3306
如果只看到 0.0.1:3306,说明bind-address未生效,回去检查配置文件并重启服务,如果看到 0.0.0:3306,则排除监听问题。
再检查用户授权是否匹配
查看用户表:
SELECT user, host, plugin, authentication_string FROM mysql.user;
重点确认 host 字段,如果host是 localhost,远程连接必然报1130错误,某些MySQL版本默认使用 caching_sha2_password 认证插件,部分老版本客户端工具可能不支持,导致连接失败,这时可以在MySQL中修改用户认证插件:
ALTER USER 'lan_user'@'192.168.1.%' IDENTIFIED WITH mysql_native_password BY 'StrongPassword123!'; FLUSH PRIVILEGES;
MySQL 8.0及以上版本建议直接用新版客户端,但如果你使用的是Navicat旧版或老代码,可能需要此操作。
主要问题:检查网络设备ACL
部分企业的局域网中,核心交换机或安全设备配置了ACL(访问控制列表),如果服务器和客户端在同一子网且防火墙已放行,但仍无法连接,需要联系网络管理员确认是否有策略拦截了3306端口的跨设备访问,这一块属于网络基础设施问题,不在MySQL配置层面解决。
局域网访问MySQL的常见问题Q&A
Q1:局域网电脑连接MySQL时提示10061错误怎么办?
10061错误表示主动拒绝连接,即服务器端口未开放或服务未启动,先在服务器上确认为什么3306端口没有被监听,使用 netstat -tlnp | grep 3306 检查,若没有输出,说明MySQL服务未启动或配置文件中的 bind-address 未生效,重启MySQL服务并再次检查监听状态,如果监听正常,则检查防火墙是否拦截了来自客户端IP的入站请求,注意Windows防火墙可能默认拦截3306入站,需要在入站规则中显式放行。
Q2:如何只允许固定的两台电脑访问局域网MySQL?
在MySQL授权时,不要使用 通配符,而是为每台电脑创建独立的用户或一个用户授权多个host,实际操作中,可以执行:
CREATE USER 'fixed_user'@'192.168.1.21' IDENTIFIED BY 'Password123!'; CREATE USER 'fixed_user'@'192.168.1.35' IDENTIFIED BY 'Password123!'; GRANT ALL PRIVILEGES ON . TO 'fixed_user'@'192.168.1.21'; GRANT ALL PRIVILEGES ON . TO 'fixed_user'@'192.168.1.35'; FLUSH PRIVILEGES;
同时在防火墙层面,限制入站规则只允许这两个IP连接3306端口,双重限制确保即使MySQL用户密码泄露,其他电脑也无法连接。
Q3:为什么我按照步骤配置完,局域网其他电脑还是连不上MySQL?
大部分情况下出在防火墙或者MySQL配置文件中 bind-address 这一项没有真正生效,首先确认MySQL的配置文件是否被多个配置文件覆盖,/etc/mysql/my.cnf 中通过 !includedir 引入了多个目录下的文件,你修改的配置可能被其他文件中的 bind-address 覆盖,第二种常见情况是修改完配置文件后没有重启MySQL,第三种情况是服务器本身有云平台安全组限制,如果你的服务器是云主机,即使系统内防火墙放行,云控制台的安全组规则也必须放行3306端口,逐一排查这三个位置,最终一定能定位到问题。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/698400.html





