多版本mysql可在同一服务器共存,需确保端口、数据目录、套接字和配置文件独立。1. 使用官方二进制包分别解压到不同目录;2. 为每个版本创建独立配置文件(如my-5.7.cnf、my-8.0.cnf),指定不同端口、socket、datadir等;3. 创建对应数据目录并授权;4. 用各自mysqld初始化数据目录;5. 通过–defaults-file启动各实例,并用对应客户端连接。建议避免包管理器安装以防冲突。

在一台服务器或开发机上安装多个版本的 MySQL 共存,常见于需要测试不同版本兼容性或维护多个项目的情况。实现多版本共存的关键是避免端口、数据目录、套接字文件和配置文件冲突。下面介绍一种基于 linux 系统(以 centos/ubuntu 为例)的多版本 MySQL 安装方法。
选择安装方式:推荐使用二进制包
为了便于管理多个版本,建议使用官方提供的二进制压缩包(tar.gz)方式安装,而不是通过系统包管理器(如 yum 或 apt),因为后者容易覆盖或冲突。
- 去 MySQL 官方下载页面 获取所需版本的 Linux-Generic 二进制包(例如:mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz 和 mysql-8.0.36-linux-glibc2.12-x86_64.tar.gz)
- 将不同版本解压到独立目录,例如:
/usr/local/mysql-5.7
/usr/local/mysql-8.0 - 创建软链接方便调用(可选):
ln -s /usr/local/mysql-5.7 /usr/local/mysql57
ln -s /usr/local/mysql-8.0 /usr/local/mysql80
为每个版本配置独立的配置文件和数据目录
每个 MySQL 实例必须使用不同的配置文件、数据目录、端口和 socket 文件,防止冲突。
- 为每个版本创建独立的配置文件,例如:
/etc/my-5.7.cnf
/etc/my-8.0.cnf - 示例 my-5.7.cnf 内容:
[mysqld]
port=3307
socket=/tmp/mysql-5.7.sock
basedir=/usr/local/mysql-5.7
datadir=/var/lib/mysql-5.7
pid-file=/var/lib/mysql-5.7/mysqld.pid
server-id=1
log-Error=/var/log/mysql-5.7.log
- 示例 my-8.0.cnf 内容:
[mysqld]
port=3308
socket=/tmp/mysql-8.0.sock
basedir=/usr/local/mysql-8.0
datadir=/var/lib/mysql-8.0
pid-file=/var/lib/mysql-8.0/mysqld.pid
server-id=2
log-error=/var/log/mysql-8.0.log
- 提前创建数据目录并授权:
mkdir /var/lib/mysql-5.7 /var/lib/mysql-8.0
chown -R mysql:mysql /var/lib/mysql-5.7 /var/lib/mysql-8.0
初始化各自的数据目录
使用对应版本的 mysqld 命令进行初始化,生成 root 密码或设置空密码(根据需求)。
- 初始化 MySQL 5.7:
- 初始化 MySQL 8.0:
- 记录输出中的临时 root 密码,后续登录时使用
/usr/local/mysql-5.7/bin/mysqld –initialize –user=mysql –basedir=/usr/local/mysql-5.7 –datadir=/var/lib/mysql-5.7
/usr/local/mysql-8.0/bin/mysqld –initialize –user=mysql –basedir=/usr/local/mysql-8.0 –datadir=/var/lib/mysql-8.0
分别启动与连接不同版本实例
使用 –defaults-file 指定配置文件来启动每个实例。
- 启动 MySQL 5.7:
- 启动 MySQL 8.0:
- 连接 MySQL 5.7:
- 连接 MySQL 8.0:
/usr/local/mysql-5.7/bin/mysqld –defaults-file=/etc/my-5.7.cnf &
/usr/local/mysql-8.0/bin/mysqld –defaults-file=/etc/my-8.0.cnf &
/usr/local/mysql-5.7/bin/mysql -u root -p -S /tmp/mysql-5.7.sock
/usr/local/mysql-8.0/bin/mysql -u root -p -S /tmp/mysql-8.0.sock
如果希望开机自启,可以为每个实例编写 systemd 服务脚本(如 mysql-57.service 和 mysql-80.service),指定各自的配置文件和启动命令。
基本上就这些。只要保证端口、数据目录、socket、配置文件彼此独立,多个 MySQL 版本能稳定共存。操作时注意权限和路径准确性,避免混淆版本导致误操作。