在虚拟机中安装MySQL数据库是开发人员、系统管理员和学习者进行实践、测试和隔离环境的常见操作,这种做法能够提供一个干净、可控且可复现的实验平台,避免对主操作系统造成任何潜在影响,以下将详细介绍在虚拟机中安装MySQL的完整流程,涵盖准备工作、安装步骤、安全配置及远程连接等关键环节。
准备工作
在开始安装之前,确保所有必要的组件和配置都已就绪,周全的准备工作可以避免后续过程中出现不必要的麻烦。
需要准备虚拟化软件,Oracle VM VirtualBox(免费开源)或 VMware Workstation,需要一个服务器版的Linux操作系统镜像文件,如 CentOS Stream、Ubuntu Server 或 Debian,建议使用最小化安装版本,以减少不必要的资源占用。
规划虚拟机的硬件资源,MySQL并非极度消耗资源的应用,但为了保证稳定运行,推荐以下配置:
资源类型 | 最低配置 | 推荐配置 | 说明 |
---|---|---|---|
CPU | 1核心 | 2核心或更多 | 处理并发查询请求 |
内存 | 1GB | 2GB – 4GB | innodb_buffer_pool_size 等关键参数依赖内存 |
硬盘 | 20GB | 50GB或更多 | 用于存放操作系统、MySQL程序及数据库文件 |
网络 | NAT | 桥接模式或NAT+端口转发 | 桥接模式更便于从主机访问虚拟机中的MySQL |
网络配置尤为关键,如果希望从宿主机(你的物理电脑)或其他设备访问虚拟机中的MySQL,桥接模式是最佳选择,它会让虚拟机获得与宿主机在同一网段的IP地址,若选择NAT模式,则需要在虚拟机网络设置中配置端口转发,将宿主机的某个端口(如3306)映射到虚拟机的3306端口。
详细安装步骤
我们将以两种主流的Linux发行版为例,展示在虚拟机中装MySQL的具体过程。
在基于Debian/Ubuntu的系统上安装
这类系统使用apt
作为包管理器,安装过程相对简洁。
-
更新软件包列表:在安装任何新软件之前,首先更新本地的软件包索引。
sudo apt update sudo apt upgrade -y
-
安装MySQL服务器:执行以下命令,
apt
会自动处理所有依赖关系并下载安装MySQL社区服务器。sudo apt install mysql-server -y
在某些较新的Ubuntu版本中,安装过程中可能会提示你为root用户设置密码。
-
启动与设置开机自启:安装完成后,MySQL服务通常会自动启动,使用
systemctl
命令进行管理。sudo systemctl start mysql sudo systemctl enable mysql sudo systemctl status mysql
status
命令应显示active (running)
,表示服务运行正常。
在基于Red Hat/CentOS的系统上安装
对于CentOS 7/8/Stream等系统,官方推荐通过MySQL Yum仓库进行安装,这能确保获取到最新且稳定的版本。
-
下载并安装MySQL仓库:访问MySQL官方网站,找到对应你系统版本的Yum仓库下载链接,以CentOS 8为例:
sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
-
安装MySQL服务器:启用仓库后,使用
yum
或dnf
进行安装。sudo yum install mysql-community-server -y
在安装过程中,如果遇到GPG密钥验证失败的问题,可以临时使用
--nogpgcheck
参数来跳过验证(生产环境不推荐),或手动导入正确的密钥。 -
启动与设置开机自启:与Debian/Ubuntu系统类似,使用
systemctl
管理服务。sudo systemctl start mysqld sudo systemctl enable mysqld sudo systemctl status mysqld
对于MySQL 8.0,首次启动时会在日志文件(
/var/log/mysqld.log
)中为root用户生成一个临时密码,可用以下命令查看:sudo grep 'temporary password' /var/log/mysqld.log
安全配置与基础设置
无论通过哪种方式安装,运行MySQL自带的安全脚本都是至关重要的一步,它能极大地提升数据库的初始安全性。
sudo mysql_secure_installation
该脚本会以交互式方式引导你完成一系列安全设置:
- 设置root密码:为root用户设置一个强密码。
- 移除匿名用户:删除默认创建的匿名账户,消除安全隐患。
- 禁止root远程登录:限制root用户只能从本地登录,防止暴力破解。
- 移除测试数据库:删除默认的
test
数据库,该库对所有用户开放。 - 重新加载权限表:使上述所有更改立即生效。
建议在所有选项上都选择Y
(是)。
验证与远程连接
-
本地验证:首先在虚拟机内部尝试登录MySQL,验证安装和配置是否成功。
mysql -u root -p
输入之前设置的root密码,成功进入
mysql>
命令行界面即表示本地连接正常。 -
配置远程访问:要从宿主机或其他机器连接,需要进行两处配置。
-
修改MySQL绑定地址:编辑MySQL配置文件(通常位于
/etc/mysql/mysql.conf.d/mysqld.cnf
或/etc/my.cnf
),找到bind-address
参数,将其值从0.0.1
(仅限本地)修改为0.0.0
(监听所有IP地址)或虚拟机的具体IP。# bind-address = 127.0.0.1 bind-address = 0.0.0.0
修改后重启MySQL服务。
-
配置防火墙:开放MySQL的默认端口3306。
- Ubuntu (ufw):
sudo ufw allow 3306
- CentOS (firewall-cmd):
sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload
- Ubuntu (ufw):
-
创建远程用户:出于安全考虑,不建议直接使用root用户远程登录,应创建一个新用户并授权。
-- 登录MySQL后执行 CREATE USER 'myuser'@'%' IDENTIFIED BY 'YourStrongPassword'; GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'%'; FLUSH PRIVILEGES;
这里的表示允许该用户从任何IP地址连接,若要限制特定IP,可将替换为相应的IP地址。
-
完成以上所有步骤后,你就可以在宿主机上使用Navicat、DBeaver、MySQL Workbench等图形化工具,或通过命令行,使用虚拟机的IP地址、端口号3306以及你创建的远程用户凭据来成功连接到虚拟机中装好的MySQL数据库了,至此,一个功能完备、安全且可远程访问的MySQL虚拟环境便搭建完成。