宿主机(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+X → Y → Enter。
然后重启 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 用户的 host 为 localhost,表示只允许本地登录。
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);






