完全可行,需手动解压tarball部署多版本mysql,各自独立basedir、datadir、port、socket和pid-file,并配独立systemd服务与客户端连接参数。

同一台机器装多个 MySQL 版本是否可行
完全可行,但不能通过系统包管理器(如 apt 或 yum)默认安装多个主版本——它们会冲突服务名、端口、socket 路径和配置文件位置。真正能共存的是「手动编译安装」或「官方二进制 tarball 解压部署」,每个版本独立目录、独立配置、独立端口。
如何用 tarball 方式部署多个 MySQL 版本
MySQL 官网提供的 mysql-8.0.33-linux-glibc2.17-x86_64.tar.xz 和 mysql-5.7.42-linux-glibc2.12-x86_64.tar.xz 这类压缩包,本质是自包含的二进制套件,解压即用,不写注册表、不改全局路径。关键在于隔离以下 5 个要素:
-
basedir:每个版本单独目录,如/opt/mysql-5.7.42、/opt/mysql-8.0.33 -
datadir:必须不同,如/var/lib/mysql57、/var/lib/mysql80 -
port:避免冲突,例如3307(5.7)、3308(8.0) -
socket:如/tmp/mysql57.sock、/tmp/mysql80.sock -
pid-file:如/var/run/mysqld/mysqld57.pid
初始化时务必指定完整路径:bin/mysqld --initialize --user=mysql --basedir=/opt/mysql-5.7.42 --datadir=/var/lib/mysql57。跳过 mysqld_safe,直接用 bin/mysqld 启动更可控。
启动/停止脚本怎么写才不串版本
别依赖 systemctl start mysql——它只认一个 mysqld.service。应为每个版本写独立 service 文件,比如 /etc/systemd/system/mysqld@57.service,内容里用 %i 占位符动态注入版本标识:
dboxShare 是一款简便易用的免费开源企业网盘,基于 .NET 技术开发,用于构建安全高效的文件云存储及云管理平台。 用户无需改变工作习惯,文件双向同步将会根据相应的权限自动进行上传、下载及版本更替,为共享协作提供便捷高效的解决方案。 系统具有安装简单、部署灵活和维护量小的特点,适用于企业组织及团队搭建安全高效的私有云网盘。
[Service] ExecStart=/opt/mysql-%i/bin/mysqld --defaults-file=/etc/my_%i.cnf Restart=always User=mysql
然后启用:systemctl enable mysqld@57、systemctl start mysqld@57。注意 my_57.cnf 必须显式指定 basedir 和 datadir,否则 mysqld 会按内置默认值找错地方。
客户端连接时如何指定对应版本的服务
mysql 命令本身不绑定版本,它只是客户端。连哪个实例,取决于你传的参数:
- 连 5.7 实例:
mysql -S /tmp/mysql57.sock -u root -p - 连 8.0 实例:
mysql -h 127.0.0.1 -P 3308 -u root -p(用 TCP,避免走默认 socket) - 如果想让
mysql命令默认走某版本,可设别名:alias mysql57='mysql -S /tmp/mysql57.sock'
特别注意:MySQL 8.0 默认认证插件是 caching_sha2_password,而老客户端(如 MySQL 5.7 的 mysql 命令)可能不支持——此时要么升级客户端,要么在 8.0 用户创建时显式指定 IDENTIFIED WITH mysql_native_password。
真正的难点不在安装,而在环境变量清理和 shell 别名污染;一不小心 $PATH 里混进两个 bin 目录,which mysqld 就会指错。每次切换前,建议用 ps aux | grep mysqld 确认进程实际加载的 basedir。









