MySQL默认不允许局域网远程连接,根本原因是bind-address=127.0.0.1且root@localhost权限受限;须同步修改配置文件监听内网IP、创建'lanuser'@'192.168.1.%'等专用用户并授权、开放防火墙3306端口,三者缺一不可。

MySQL 默认不允许局域网远程连接,根本原因就两点:bind-address = 127.0.0.1 + root@localhost 用户权限限制。只改配置或只授权都不行,必须同时处理。
修改 mysqld.cnf 让 MySQL 监听内网 IP
Linux 上常见路径是 /etc/mysql/mysql.conf.d/mysqld.cnf,Windows 是 my.ini。找到 [mysqld] 段下的 bind-address 行:
- 若只要局域网访问(比如所有设备都在
192.168.1.x网段),建议写成具体服务器内网 IP,例如:bind-address = 192.168.1.100—— 比0.0.0.0更安全 - 不要留空、不要注释掉,否则会回退到默认的
127.0.0.1 - 确认没有
skip-networking = ON,有则删掉或改为OFF - 改完必须重启服务:
sudo systemctl restart mysql(Ubuntu/Debian)或sudo systemctl restart mysqld(CentOS/RHEL)
创建或更新用户,把 host 设为局域网范围
登录 MySQL 后,别直接改 root@localhost 的 host 字段——这会导致本地命令行连不上。正确做法是新增专用用户:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 允许整个局域网段(推荐):
CREATE USER 'lanuser'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!'; - 只允许某台固定机器:
CREATE USER 'lanuser'@'192.168.1.35' IDENTIFIED BY 'StrongPass123!'; - MySQL 8.0+ 默认用
caching_sha2_password插件,如果客户端(如旧版 Navicat 或 PHP)报认证失败,显式指定插件:IDENTIFIED WITH mysql_native_password BY '...' - 授予权限后务必执行:
FLUSH PRIVILEGES;
检查防火墙是否放行 3306 端口
即使 MySQL 配置和用户都对了,防火墙挡在中间照样连不通:
- Ubuntu/Debian:
sudo ufw allow 3306/tcp - CentOS/RHEL:
sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload - 云服务器(如阿里云、腾讯云)还要额外检查安全组规则,确保入方向开放
3306端口,源 IP 可设为192.168.1.0/24 - Windows Server 自带防火墙也需手动添加入站规则
测试连接时用对 IP 和参数
客户端连接命令容易出错,尤其混淆 -h 和本地地址:
- 从另一台局域网电脑连接,
-h必须填 MySQL 服务器的内网 IP(不是localhost或127.0.0.1):mysql -h 192.168.1.100 -u lanuser -p - 如果提示
Host '192.168.1.35' is not allowed to connect,说明用户host值不匹配,回到第二步查SELECT user, host FROM mysql.user; - Navicat 或 DBeaver 连接时,“主机名/IP地址”栏填服务器内网 IP,端口保持
3306,用户名填你创建的lanuser
最容易被忽略的是:改完配置不重启 MySQL 服务,或者授权后忘了 FLUSH PRIVILEGES;还有就是云服务器的安全组和本地防火墙双重重叠拦截。三者缺一不可。

















