虚拟机里装 MySQL,先看系统和版本匹配不匹配
MySQL 官方不再为旧系统提供新版本支持,比如 CentOS 7 默认源里的
mysql包其实是 MariaDB;Ubuntu 22.04 之后默认仓库也只带
mariadb-server,不是 MySQL。直接
apt install mysql-server或
yum 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_size和
sort_buffer_size避免把
datadir放在快照频繁的虚拟磁盘上,尤其是 VMware 的“精简置备”模式,写入放大严重,容易触发 I/O 超时
虚拟机部署 MySQL 最容易被忽略的,其实是资源限制和网络绑定逻辑——它不像物理机那样“默认能通”,也不像容器那样自带隔离约束,很多问题表面是配置错,根子在虚拟化层的资源可见性没对齐。
