跨设备Java连接VM中MySQL数据库失败问题求助
跨设备Java连接XAMPP MySQL失败的排查与解决方法
核心问题定位
系统A(192.168.1.6)无法连接系统B(VirtualBox桥接虚拟机,IP 192.168.1.254)上的XAMPP MySQL,仅系统B本地运行程序可正常连接,已尝试用户权限配置、XAMPP设置调整但无效。
分步排查与解决
1. 先确认虚拟机网络是否正常连通
- 在系统A的命令行执行
ping 192.168.1.254,如果没有返回数据包,说明VirtualBox桥接网卡配置有问题:- 打开VirtualBox虚拟机设置→网络,确认桥接模式绑定的是主机当前正在使用的网卡(比如WiFi或有线网卡)
- 进入虚拟机的Windows 10,手动设置静态IP为192.168.1.x网段(和系统A同网段),避免DHCP自动分配导致IP变动
- 如果ping通,再测试3306端口是否开放:执行
telnet 192.168.1.254 3306(Windows需先开启telnet功能)或nc -zv 192.168.1.254 3306(Linux/macOS),如果连接失败,说明端口被拦截。
2. 修改MySQL绑定地址,允许外部连接
XAMPP默认MySQL仅监听localhost,需要调整配置让它接受所有IP的连接:
- 打开XAMPP控制面板,点击MySQL模块的
Config按钮,选择my.ini配置文件 - 找到
bind-address配置项,将其值改为0.0.0.0(如果该行被注释,去掉前面的#) - 重启XAMPP的MySQL服务,确保配置生效
3. 配置虚拟机防火墙允许3306端口入站
Windows 10默认防火墙会拦截外部对3306端口的请求,需要添加规则:
- 打开「Windows Defender防火墙」→「高级设置」→「入站规则」→「新建规则」
- 选择「端口」→ 下一步,勾选「TCP」,输入特定本地端口
3306 - 选择「允许连接」→ 下一步,勾选所有网络类型(或仅允许192.168.1.0/24网段)
- 命名规则(比如“MySQL外部连接”)后完成创建
4. 再次确认MySQL用户的连接权限
确保你的MySQL用户拥有从外部IP连接的权限:
- 在系统B的XAMPP里打开MySQL的Shell,执行:
查看你的用户(比如root)对应的SELECT user, host FROM mysql.user;host字段是否为%(表示允许所有IP连接),如果是localhost或127.0.0.1,则只能本地连接 - 如果权限不足,执行授权语句(注意你的密码为空):
GRANT ALL PRIVILEGES ON caleno.* TO 'root'@'%' IDENTIFIED BY ''; FLUSH PRIVILEGES;
5. 检查JDBC代码细节
- 确认JDBC URL拼写正确,端口号3306是XAMPP默认MySQL端口,如果你修改过要对应调整
- 检查项目中的MySQL驱动版本:MySQL 8.0及以上驱动类为
com.mysql.cj.jdbc.Driver,5.x版本为com.mysql.jdbc.Driver,驱动版本不匹配也会导致连接失败
内容的提问来源于stack exchange,提问作者cl3ar
相关产品推荐
相关产品推荐

