如何在虚拟机中快速完成MySQL环境搭建 虚拟机数据库环境搭建与网络互通配置

1次阅读

mysql虚拟机安装失败主因是mariadb预装导致冲突,需彻底卸载并锁定相关包;远程连接需改bind-address、建非root用户、配对网卡模式及停防火墙;验证须查监听地址、用户Host和认证插件。

如何在虚拟机中快速完成MySQL环境搭建 虚拟机数据库环境搭建与网络互通配置

MySQL 在虚拟机中安装失败的常见原因

多数人卡在 apt install mysql-serveryum install mysql-community-server 这一步,不是报依赖冲突,就是服务启动后立刻退出。根本原因通常是系统已预装了 MariaDB(尤其 ubuntu 22.04+、centos 8+),而 MySQL 官方包与之文件路径/服务名冲突。

实操建议:

  • 先运行 systemctl list-unit-files | grep -i sql 确认是否已有 mariadb.service 或残留的 mysql.service
  • 彻底清理:Ubuntu 上执行 sudo apt purge mariadb-server mysql-server;CentOS 上用 sudo yum remove mariadb-libs mysql-community-server,再删掉 /var/lib/mysql/etc/my.cnf
  • 安装前加一条:sudo apt-mark hold libmariadb3(Ubuntu)或 sudo yum versionlock mariadb-libs(CentOS),避免后续系统更新又悄悄拉回 MariaDB

配置 MySQL 允许远程连接但不暴露 root

默认安装后 mysql -u root -p 能本地登录,但宿主机用 navicat 或 DBeaver 连不上——不是防火墙问题,而是 MySQL 默认只监听 127.0.0.1,且 root 用户绑定 localhost 主机名。

实操建议:

  • 编辑 /etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu)或 /etc/my.cnf(CentOS),把 bind-address = 127.0.0.1 改成 bind-address = 0.0.0.0;若该行被注释,取消注释并修改
  • 不要直接给 root 开放远程:登录 MySQL 后执行 CREATE USER 'dev'@'%' IDENTIFIED BY 'StrongPass123!';,再 GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%' WITH GRANT OPTION;
  • 必须执行 FLUSH PRIVILEGES;,否则权限不生效;% 表示任意 IP,生产环境应换成宿主机具体 IP(如 'dev'@'192.168.56.1'

VirtualBox / VMware 中宿主机与虚拟机网络互通的关键设置

即使 MySQL 配置正确,宿主机仍连不上,大概率是虚拟网卡模式选错了。NAT 模式下虚拟机能上网,但宿主机无法主动访问虚拟机服务;仅 Bridged 模式或 Host-Only + 端口转发能解决。

实操建议:

  • VirtualBox 推荐用 Host-Only Adapter:在 VirtualBox 管理器 → “全局设定” → “网络” → 添加 Host-Only 网络(如 vboxnet0,IP 段设为 192.168.56.1/24),虚拟机网卡设为此模式,再手动配静态 IP(如 192.168.56.10
  • VMware 推荐用 Host-Only 模式,并确认 VMware Network Adapter VMnet1 已启用且 IP 是 192.168.11.1windows)或 vmnet1 对应 IP(macos/linux
  • 无论哪种,都要关掉虚拟机防火墙:sudo ufw disable(Ubuntu)或 sudo systemctl stop firewalld(CentOS);MySQL 端口 3306 不需要额外放行,因为防火墙已停

验证连通性时容易忽略的三个检查点

宿主机 ping 得通虚拟机 IP,telnet 也显示 Connected,但客户端仍报 access denied for userConnection refused——问题往往不在 MySQL 本身。

  • 检查虚拟机内是否真在监听 0.0.0.0:3306:运行 sudo ss -tlnp | grep :3306,输出里要有 *:3306,而不是 127.0.0.1:3306
  • 检查用户主机名匹配:用 select User,Host FROM mysql.user; 确认你创建的用户 Host 列确实是 % 或宿主机 IP,不是 localhost(它和 127.0.0.1 在 MySQL 中行为不同)
  • 检查客户端驱动兼容性:MySQL 8.0+ 默认用 caching_sha2_password 插件,旧版 Navicat 或某些 JDBC 驱动不支持;临时解决可执行 ALTER USER 'dev'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPass123!';

虚拟机里搭 MySQL 最耗时间的从来不是安装命令,而是反复验证网络路径上哪一环断了——从虚拟网卡模式、bind-address、用户 Host、认证插件,到客户端驱动版本,漏掉任意一个都会卡住。

text=ZqhQzanResources