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

MySQL 在虚拟机中安装失败的常见原因
多数人卡在 apt install mysql-server 或 yum 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.1(Windows)或vmnet1对应 IP(macOS/Linux) - 无论哪种,都要关掉虚拟机防火墙:
sudo ufw disable(Ubuntu)或sudo systemctl stop firewalld(CentOS);MySQL 端口3306不需要额外放行,因为防火墙已停
验证连通性时容易忽略的三个检查点
宿主机 ping 得通虚拟机 IP,telnet 也显示 Connected,但客户端仍报 Access denied for user 或 Connection 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、认证插件,到客户端驱动版本,漏掉任意一个都会卡住。










