跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何在虚拟机中搭建mysql环境_mysql虚拟化部署

虚拟机中安装MySQL与物理机无本质区别,但需修改bind-address、认证插件及文件权限;Docker部署更符合虚拟化本意,须挂载卷并正确设置权限;跨VM访问需配置防火墙、网络模式及用户远程权限。 直接在 虚拟机 里装 MySQL 和物理机没区别,关键看你要不要容器化 如果你只是想跑个 MySQL 供开发或测试用,
apt install mysql-server
(Ubuntu/Debian)或
yum install mysql-server
(CentOS 7)就能搞定。但“ 虚拟化 部署”这个词容易让人混淆——它可能指传统虚拟机(VM)里的 MySQL,也可能误指容器(Docker)。先明确:VM 里装 MySQL 就是常规 Linux 安装,不涉及特殊“虚拟化适配”。 VM 中安装 MySQL 后必须改的三件事 默认配置在虚拟机里大概率连不上、存不了数据、启动失败。常见问题不是安装失败,而是后续访问被拦住:
bind-address
默认是
127.0.0.1
,导致宿主机或其他 VM 无法连接 → 改成
0.0.0.0
或具体网卡 IP MySQL 8.0+ 默认用
caching_sha2_password
插件,老客户端(如某些 Python MySQL 驱动、Navicat 旧版)会报
Authentication plugin 'caching_sha2_password' cannot be loaded
→ 创建用户时指定
mysql_native_password
sudo systemctl start mysqld
失败?检查
/var/log/mysqld.log
,常见原因是磁盘空间不足或
/var/lib/mysql
权限不对(尤其你手动挂载了新磁盘后没 chown mysql :mysql) Docker 方式更接近“虚拟化部署”的本意,但别直接 run 官方镜像 如果真想用轻量、可复现的方式部署,Docker 是更贴切的“虚拟化”实践。但注意:
docker run -d -p 3306:3306 mysql:8.0
会丢数据——容器删了,数据库就没了。 正确做法是绑定宿主机目录或使用命名卷: MySQL(Linux) MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。 下载
docker run -d \ --name mysql-dev \ -v /mydata/mysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -e MYSQL_DATABASE=testdb \ -p 3306:3306 \ -d mysql:8.0
⚠️ 注意:
/mydata/mysql
目录必须提前
chown -R 999:999 /mydata/mysql
(MySQL 容器内用用户 ID 999 运行),否则启动失败且日志只显示
mysqld: Can't create/write to file
。 跨 VM 访问 MySQL 时防火墙和网络模式最常踩坑 宿主机 ping 得通 VM,但连不上 3306?别急着查 MySQL 配置,先看这两处: VM 的防火墙是否放行 3306:Ubuntu 上是
sudo ufw allow 3306
;CentOS 7 是
sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload
VM 网络模式是不是 NAT:如果是,宿主机要通过 VM 的 IP 连(比如
192.168.122.10
),不能用
localhost
;如果是桥接(Bridged),确保 VM 和宿主机在同一子网,且没被路由器隔离 MySQL 用户权限是否包含远程来源:创建用户得用
CREATE USER 'dev'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd';
,而不是
'dev'@'localhost'
这些点串起来才构成一个真正可用的虚拟机 MySQL 环境。很多人卡在某一个环节反复重装,其实跟 MySQL 本身关系不大。

相关文章