mysql安装多版本如何共存_mysql版本管理技巧

来源:这里教程网 时间:2026-02-28 20:50:53 作者:

同一台机器装多个 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
占位符动态注入版本标识:

[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

相关推荐