从宿主机(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);
相关推荐
x***r1513 分钟前
vcredist_x64安装步骤详解(附VC++运行库缺失解决方法)
windows
阿维的博客日记17 分钟前
隔离性和mvcc有什么关系吗
数据库·mysql·事务·mvcc·隔离性
seabirdssss18 分钟前
闲置笔记本改造成 Ubuntu 开发测试服务器
linux·服务器·ubuntu
拾贰_C21 分钟前
【OpenAI | Ubuntu | environment | env configuration】Ubuntu 怎么/如何配置环境变量
linux·运维·ubuntu
少控科技21 分钟前
小数典应用:农场环境数据采集监控
开发语言·windows·c#
Vect__44 分钟前
初识MySQL,数据库相关概念,库操作,表操作
数据库·mysql
拾贰_C44 分钟前
【OpenAI | Ubuntu | bigmodel】 openai规范配置bigmodel(zhipu)大模型api
linux·运维·ubuntu
空空潍1 小时前
MySQL索引不生效?一文理解CBO成本模型
数据库·sql·mysql
nLYA SCOL1 小时前
MySQL数据的增删改查(一)
android·javascript·mysql
明日清晨1 小时前
VmWare安装官方原版Win7 X64踩坑指南
windows