从宿主机(Windows)通过 NAT 模式连接虚拟机(Ubuntu)中的 MySQL

宿主机(NAT 模式)连接虚拟机 MySQL 完整记录

环境:Windows 宿主机 + VMware Workstation(Ubuntu 虚拟机,NAT 网络)

目标:从宿主机通过本地网络连接虚拟机内的 MySQL,并允许 Java 等程序远程访问。


1. 查看本地网络 IP

  • Windows 宿主机 :WIN+R 打开 CMD,输入
    ipconfig
  • Linux 虚拟机 :CTRL+ALT+T 打开终端,输入
    ifconfig

记录下双方的 IPv4 地址(例如虚拟机 IP 为 192.168.31.16)。

2. 测试网络连通性(ping)

在宿主机上 ping 虚拟机 IP:

ping 192.168.31.16

同样可在虚拟机内 ping 宿主机 IP。

如果 ping 不通,检查虚拟机网络适配器是否为 NAT 模式,并关闭防火墙测试。

3. 测试 MySQL 端口(3306)是否可达

使用 telnet 命令(Windows 需在"启用或关闭 Windows 功能"中安装 Telnet 客户端):

telnet 192.168.31.16 3306

若出现黑屏或提示连接成功,说明端口开放;若提示无法连接,继续后续步骤。

mysql可能处于本地监听状态

成功

4. 检查虚拟机内 MySQL 服务状态

sudo systemctl status mysql

确保状态为 active (running)

5. 查看 MySQL 监听的端口和地址

sudo netstat -tulnp | grep 3306

初始输出示例:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1234/mysqld

表示只监听本地回环地址(127.0.0.1),无法远程访问。

6. 修改 MySQL 配置文件,允许监听所有网络接口

编辑配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

找到以下行:

bind-address = 127.0.0.1

修改为:

bind-address = 0.0.0.0

保存退出:Ctrl+XYEnter

然后重启 MySQL:

sudo systemctl restart mysql
sudo systemctl status mysql

再次执行 sudo netstat -tulnp | grep 3306,确认变为:

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN ...

7. 检查 MySQL 用户权限

登录 MySQL:

sudo mysql

查询用户表:

SELECT host, user FROM mysql.user;

通常 root 用户的 hostlocalhost,表示只允许本地登录。

8. 创建远程访问用户(授予远程权限)

注意:以下命令已修正原笔记中的语法错误。测试环境可使用简单密码,生产环境请务必加强。

在 MySQL 中执行:

sql 复制代码
sql
-- 降低密码策略(仅测试环境)
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 4;

-- 创建用户,允许从 192.168 网段连接(也可用 '%' 允许任意 IP)
CREATE USER 'root'@'192.168.%' IDENTIFIED BY '123456';

-- 授予所有权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.%' WITH GRANT OPTION;

-- 刷新权限
FLUSH PRIVILEGES;
--如果想允许任意 IP 访问,将 'root'@'192.168.%' 替换为 'root'@'%'。

9. 从宿主机远程连接测试

退出 MySQL 后,在宿主机 CMD 中执行(需安装 MySQL 客户端):

sql 复制代码
mysql -h 192.168.31.16 -u root -p

输入密码 123456,若成功进入 MySQL 命令行,则表示远程连接配置成功。

10. 在 Java 程序中连接远程 MySQL

java 复制代码
String url = "jdbc:mysql://192.168.31.16:3306/你的数据库名?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);
相关推荐
AI人工智能+电脑小能手31 分钟前
【大白话说Java面试题 第99题】【Mysql篇】第29题:如何选择合适的分布式主键方案?
java·数据库·分布式·mysql·面试
云樱梦海1 小时前
OpenClaw官方:OpenClaw Windows Node 实战(1.5K ★ 开源推荐)
windows·开源·github·openclaw
量子物理学2 小时前
ubuntu安装docker
ubuntu·docker·eureka
深度学习04072 小时前
SVN 独立服务端部署与客户端使用指南(CentOS/Rocky 9.5 + Windows)
windows·svn
爱分享软件的学长2 小时前
Tiled Map Editor 1.12.1 官方版下载(夸克网盘+百度网盘,SHA256校验)
windows·开源软件·软件下载
MIXLLRED3 小时前
随笔——在 Ubuntu 22.04 中查看 Markdown (.md) 文件
linux·运维·ubuntu·markdown
Dream-Y.ocean3 小时前
鸿蒙PC平台 Carnac 按键显示适配实战:从 Windows 到 HarmonyOS 的 Electron 迁移指南
windows·electron·harmonyos
拾贰_C3 小时前
【mysql | windows | installation】 MySQL5.安装
数据库·windows·mysql
yuezhilangniao4 小时前
MySQL 8.0.32 二进制安装脚本 和初始化 操作系统版本rocky86
数据库·mysql·adb
面向对象World5 小时前
Z8350 Broadcom SDIO网卡调试Ubuntu 22.04 Server版
linux·运维·ubuntu