mysql如何在虚拟机中安装mysql_mysql虚拟环境部署指南

11次阅读

虚拟机部署mysql需注意系统匹配、官方源安装、跳过交互式安全配置、修改bind-address并开放防火墙、调低innodb_buffer_pool_size防OOM;资源与网络配置须适配虚拟化层特性。

mysql如何在虚拟机中安装mysql_mysql虚拟环境部署指南

虚拟机里装 MySQL,先看系统和版本匹配不匹配

MySQL 官方不再为旧系统提供新版本支持,比如 centos 7 默认源里的 mysql 包其实是 mariadbubuntu 22.04 之后默认仓库也只带 mariadb-server,不是 MySQL。直接 apt install mysql-serveryum install mysql 很可能装错,或者装的是阉割版。

实操建议:

  • 查清虚拟机系统发行版和版本号:cat /etc/os-release
  • MySQL 官网下载页 找对应平台的 MySQL Community Server(注意选 linux - Generic 或具体发行版的 deb/rpm
  • 优先用官方 APT/YUM 源(比本地包更易升级),比如 Ubuntu 添加 mysql-apt-config 工具配置源,CentOS 8+ 用 dnf module reset mysql 再启用 mysql:8.0

绕开 mysql_secure_installation 的坑

这个脚本在虚拟机里常卡住,尤其 ssh 连接不稳定或终端不支持交互时,会卡在 “Press y|Y for Yes, any other key for No” 无限等待,导致自动化部署失败。

实操建议:

  • 手动初始化数据目录再启动服务,跳过自动安全配置流程:mysqld --initialize --user=mysql --datadir=/var/lib/mysql
  • 启动后用临时密码登录(日志里找 A temporary password is generated 行),再执行 ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_pass';
  • 如果要批量部署,用 mysql --defaults-file 配置文件传参,避免交互式命令阻塞

虚拟机网络不通?重点检查 bind-address防火墙

装完 MySQL 默认只监听 127.0.0.1,宿主机或同网段其他机器连不上,不是端口没开,是根本没对外暴露。

实操建议:

  • 编辑 /etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu)或 /etc/my.cnf(CentOS),把 bind-address = 127.0.0.1 改成 0.0.0.0 或具体 IP
  • 确认用户有远程权限:CREATE USER 'root'@'%' IDENTIFIED BY 'pass'; GRANT ALL ON *.* TO 'root'@'%'; FLUSH PRIVILEGES;
  • 虚拟机防火墙必须放行 3306:ufw allow 3306(Ubuntu)或 firewall-cmd --add-port=3306/tcp --permanent(CentOS)

磁盘空间小、IO 差?别用默认 innodb_buffer_pool_size

虚拟机往往内存有限(比如 2GB),MySQL 启动后占满内存,系统开始 OOM Killer 杀进程,现象是 mysqld 随机退出,日志里只有 Killed process mysqld,没有报错。

实操建议:

  • 安装前先估算:设 innodb_buffer_pool_size 为总内存的 50%~75%,但最低不少于 128MB;2GB 虚拟机建议设 512M
  • [mysqld] 段加配置:innodb_buffer_pool_size = 512M,并同步调低 key_buffer_sizesort_buffer_size
  • 避免把 datadir 放在快照频繁的虚拟磁盘上,尤其是 vmware 的“精简置备”模式,写入放大严重,容易触发 I/O 超时

虚拟机部署 MySQL 最容易被忽略的,其实是资源限制和网络绑定逻辑——它不像物理机那样“默认能通”,也不像容器那样自带隔离约束,很多问题表面是配置错,根子在虚拟化层的资源可见性没对齐。

text=ZqhQzanResources