mysql如何在虚拟机中搭建_mysql虚拟化环境实践

1次阅读

mysql虚拟机部署需重点配置资源、网络与持久化:内存不低于2GB并禁用swap,磁盘独立且格式化为xfs/ext4,网络用桥接模式;安装需导入RPM仓库并启用mysql:8.0模块;远程连接须修改bind-address、开放防火墙端口并授权用户;快照前必须停止服务,推荐mysqldump逻辑备份。

mysql如何在虚拟机中搭建_mysql虚拟化环境实践

MySQL 在虚拟机中搭建,本质是普通 linux 安装流程的复现,但需特别注意资源分配、网络连通性与持久化设计——虚拟机不是“更轻量的服务器”,而是更容易因配置疏忽导致连接失败或数据丢失的环境。

虚拟机基础配置要点(内存、磁盘、网络)

MySQL 对内存敏感,innodb_buffer_pool_size 默认会占系统内存 75%,若虚拟机只配 1GB 内存,MySQL 启动后极易 OOM;磁盘建议用独立虚拟硬盘(非与系统盘共用),格式化为 xfsext4 并挂载到 /var/lib/mysql;网络推荐桥接模式(Bridged),避免 NAT 下端口转发失效或宿主机无法直连。

  • 最低建议:2 核 CPU + 2GB RAM + 20GB 独立磁盘
  • 禁用 swap:MySQL 在交换分区频繁读写时性能断崖式下降,运行 sudo swapoff -a 并注释 /etc/fstab 中 swap 行
  • 关闭 SELinux 或设为 permissive:否则 mysqld 可能因权限拒绝无法绑定 3306 端口

centos/RHEL 8+ 安装 MySQL 8.0 的关键步骤

官方不再提供 mysql-community-server 的 yum 仓库默认启用,必须手动导入 GPG 密钥并启用模块流;若跳过这步,yum install mysql-server 会报 “No match for argument”。

  • 下载并安装 RPM 仓库包:sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
  • 启用 mysql80 模块:sudo dnf module enable mysql:8.0
  • 安装服务:sudo dnf install mysql-server
  • 首次启动前先初始化:sudo mysqld --initialize --skip-grant-tables(仅调试用),生产环境应直接 sudo systemctl start mysqld,密码在 /var/log/mysqld.log 中查找 A temporary password

宿主机连不上虚拟机 MySQL 的常见原因

错误现象常是 Error 2003 (HY000): Can't connect to MySQL server on '192.168.x.x' (111),90% 以上不是 MySQL 没启,而是防火墙或 bind 地址拦住了。

  • 检查 MySQL 是否监听外部地址:sudo ss -tlnp | grep :3306,若显示 127.0.0.1:3306,说明 bind-address = 127.0.0.1 未改,需在 /etc/my.cnf[mysqld] 段落加 bind-address = 0.0.0.0
  • 开放防火墙端口:sudo firewall-cmd --permanent --add-port=3306/tcp + sudo firewall-cmd --reload
  • 确认用户允许远程登录:登录 MySQL 后执行 CREATE USER 'root'@'%' ideNTIFIED BY 'your_password'; GRANT ALL ON *.* TO 'root'@'%'; FLUSH PRIVILEGES;

数据持久化与快照陷阱

虚拟机快照(Snapshot)不能替代 MySQL 备份。InnoDB 的事务日志(ib_logfile*)和数据文件(ibdata1)处于中间状态时打快照,恢复后大概率报 Tablespace is missing 或崩溃。

  • 停机快照前务必执行:sudo systemctl stop mysqld,再打快照
  • 更安全的做法是用逻辑备份:mysqldump --all-databases --single-transaction > backup.sql,配合 crontab 定期导出到宿主机共享目录
  • 若用 LVM 或虚拟磁盘快照,需确保 MySQL 已调用 FLUSH TABLES WITH READ LOCK(仅限 MyISAM)或依赖 --single-transaction 保证一致性

虚拟机里跑 MySQL,最常被忽略的是磁盘 I/O 虚拟化层带来的延迟放大——哪怕宿主机 SSD 很快,虚拟磁盘控制器选错(如 IDE 而非 VirtIO)或未开启 discardio_uring 支持,INSERT ... select 类操作可能慢 3 倍以上。

text=ZqhQzanResources