引言
在开发过程中,我们有时会遇到需要在同一台机器上安装多个版本的MySQL数据库服务器的情况。这可能是因为不同的项目需要不同版本的MySQL,或者你可能想测试新版本的MySQL,同时保留现有的稳定版本。在本文中,我将分享如何在Mac系统上安装并运行两个不同版本的MySQL。
方法一:使用Homebrew安装不同版本的MySQL
在开始之前,确保你的Mac已经安装了Homebrew。如果你还没有安装Homebrew,可以通过在终端运行以下命令来安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
第一步:安装第一个MySQL版本
首先,我们将安装第一个MySQL版本。你可以通过Homebrew来安装:
brew install mysql@5.7
这里以MySQL 5.7版本为例。安装完成后,我们需要做一些设置:
-
将MySQL加入到启动项中,这样每次开机MySQL服务会自动启动。
brew services start mysql@5.7
-
将MySQL的可执行文件路径加入到你的shell配置文件中(如
.bash_profile
或.zshrc
),以便可以直接在终端使用mysql命令。echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
如果你使用的是Zsh,应该修改
.zshrc
文件。 -
重启你的终端或者运行
source ~/.bash_profile
(或source ~/.zshrc
)来更新环境变量。
第二步:安装第二个MySQL版本
接下来,我们将安装第二个MySQL版本。这里以MySQL 8.0为例:
brew install mysql@8.0
由于我们已经有一个MySQL版本在运行,我们需要对第二个版本进行不同的配置:
-
不要 将第二个MySQL版本加入到启动项,以免与第一个版本冲突。
-
修改第二个MySQL版本的默认配置文件(通常位于
/usr/local/etc/my.cnf
),改变其监听的端口和socket文件位置。[mysqld] port = 3307 socket = /tmp/mysql.sock2
-
手动启动第二个MySQL版本:
/usr/local/opt/mysql@8.0/bin/mysqld_safe --defaults-file=/usr/local/etc/my.cnf
使用和管理
安装完成后,你可以使用以下命令来启动、停止或重启特定版本的MySQL服务:
brew services start mysql@5.7
brew services stop mysql@8.0
并且,你可以通过指定端口和socket来连接到特定版本的MySQL服务器:
mysql -uroot -p --port=3306 --socket=/tmp/mysql.sock # 连接到MySQL 5.7
mysql -uroot -p --port=3307 --socket=/tmp/mysql.sock2 # 连接到MySQL 8.0
方法二:使用Docker安装不同版本的MySQL
Docker提供了一种更加灵活和隔离的方式来运行不同版本的MySQL。如果你还没有安装Docker,可以从Docker官网下载并安装Docker Desktop for Mac。
安装和运行MySQL容器
-
下载MySQL镜像
首先,我们需要从Docker Hub下载所需版本的MySQL镜像。例如,安装MySQL 5.7和8.0,可以使用以下命令:docker pull mysql:5.7 docker pull mysql:8.0
如果你是m芯片的Mac,那么可能会在拉取镜像的时候出现这样的问题:
这是因为许多Docker镜像默认是为x86_64架构(即传统的Intel和AMD处理器)构建的。对于ARM架构,需要特定的镜像。为了解决这个问题,你可以尝试以下方法:
Docker提供了一个 --platform选项,允许你指定想要运行镜像的平台类型。docker pull --platform linux/arm64 mysql:5.7
-
运行MySQL容器
接下来,我们将运行两个不同版本的MySQL容器。为了避免端口冲突,我们需要为每个容器指定不同的端口映射。例如:docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:5.7 docker run --name mysql80 -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3307:3306 -d mysql:8.0
这里
-p
标志用于映射主机端口到容器端口(主机端口:容器端口)。-e
标志用于设置环境变量,在这里设置了MySQL的root密码。
管理和使用MySQL容器
-
访问MySQL容器
你可以使用以下命令连接到运行中的MySQL容器:docker exec -it mysql57 mysql -uroot -p docker exec -it mysql80 mysql -uroot -p
这里
mysql57
和mysql80
是容器的名称,你需要输入之前设置的密码来访问数据库。 -
管理MySQL容器
对于Docker容器,你可以使用以下命令来启动、停止或重启容器:docker start mysql57 docker stop mysql80 docker restart mysql57
-
外部连接
由于我们已经映射了端口,所以可以从Mac上的任何MySQL客户端通过localhost:3306
连接到MySQL 5.7容器,通过localhost:3307
连接到MySQL 8.0容器。
清理和移除容器
当你不再需要运行MySQL容器时,可以使用以下命令来停止并移除容器:
docker stop mysql57 mysql80
docker rm mysql57 mysql80
如果你想移除下载的MySQL镜像,可以使用:
docker rmi mysql:5.7
docker rmi mysql:8.0
如何选择
- Docker对性能的开销会大一些,但是隔离性更好,可以避免版本之间的直接冲突;
- Homebrew安装性能更好,但是需要仔细配置以确保MySQL实例不会相互冲突,比如需要管理不同的端口、配置文件和服务。
如果你的主机已经存在一个MySQL并且该版本作为主力使用,而你想安装的第二个MySQL并且只是偶尔使用,这种情况下更推荐使用Docker安装第二个MySQL,因为这是一个相对简单且安全的选择,Docker容器内的MySQL实例将与主机上直接安装的MySQL完全隔离。