在一台电脑上安装多个不同版本的 MySQL 绿色版。关键在于为每个版本准备独立的“四要素”:独立的配置文件、数据目录、端口和服务名

本文以mysql5.7和mysql8.0为例,演示针对 Windows 系统的详细操作步骤。

文章资源:https://www.ilanzou.com/s/0iiL0dnC?code=msql

演示步骤

📝 准备工作

  • 以管理员身份运行:后续所有命令提示符(CMD)操作,都必须右键“以管理员身份运行”

  • 路径规范:确保两个 MySQL 的解压路径不含中文和空格

  • 分配端口:规划 MySQL 5 使用 3306​ 端口,MySQL 8 使用 3307 端口。

🗂️ 一、解压并放置安装包

将两个绿色安装包解压到两个不同的目录,例如:

  • MySQL 5:D:\env\mysql-5.7.36-winx64

  • MySQL 8:D:\env\mysql-8.0.18-winx64

⚙️ 二、创建并配置 my.ini 文件

这是最关键的一步。分别在两个 MySQL 的根目录下新建一个 my.ini 文件,然后填入以下内容:

1. 配置 MySQL 5(使用 3306 端口)

D:\env\mysql-5.7.36-winx64\my.ini​ 中粘贴以下内容,并将 basedir datadir替换为你的实际路径

[mysqld]
# 设置端口
port=3306
# 设置mysql的安装目录
basedir=D:/env/mysql-5.7.36-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:/env/mysql-5.7.36-winx64/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集
character-set-server=utf8
# 默认存储引擎
default-storage-engine=INNODB
# 默认使用 mysql_native_password 插件认证
default_authentication_plugin=mysql_native_password
​
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

注意:路径中的分隔符建议使用 /​ 或 \\​,避免使用单个 \ 引发错误。

2. 配置 MySQL 8(使用 3307 端口)

D:\env\mysql-8.0.18-winx64\my.ini​ 中粘贴以下内容,并将 basedir datadir替换为你的实际路径

[mysqld]
# 设置端口
port=3307
# 设置mysql的安装目录
basedir=D:/env/mysql-8.0.18-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:/env/mysql-8.0.18-winx64/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集
character-set-server=utf8mb4
# 默认存储引擎
default-storage-engine=INNODB
​
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4

Tips:MySQL 8.0 对字符集的默认建议是 utf8mb4

🚀 三、初始化并安装为 Windows 服务

这一步需要为每个版本单独操作。

1. 初始化 MySQL 5 实例:

  1. 以管理员身份打开 CMD,切换到 MySQL 5 的 bin 目录:

    cd /d D:\env\mysql-5.7.36-winx64\bin
  2. 执行初始化命令(--initialize-insecure 会生成一个空密码的 root 账户):

    mysqld --defaults-file="D:\env\mysql-5.7.36-winx64\my.ini" --initialize-insecure --console
  3. 注册系统服务(服务名自定义,如 MySQL57):

    mysqld --install MySQL57 --defaults-file="D:\env\mysql-5.7.36-winx64\my.ini"

2. 初始化 MySQL 8 实例:

  1. 新开一个管理员 CMD 窗口,切换到 MySQL 8 的 bin 目录:

    cd /d D:\env\mysql-8.0.18-winx64\bin
  2. 执行初始化命令:

    mysqld --defaults-file="D:\env\mysql-8.0.18-winx64\my.ini" --initialize-insecure --console

    Tips:你也可以将 --initialize-insecure​ 换成 --initialize,这会生成一个临时随机密码,请务必保存好控制台输出的密码,具体步骤参考下文【初始化时生成一个临时随机密码的操作步骤】。

  3. 注册系统服务(服务名自定义,如 MySQL80):

    mysqld --install MySQL80 --defaults-file="D:\env\mysql-8.0.18-winx64\my.ini"

🔑 四、启动服务并修改密码

1. 启动服务:

  • 启动 MySQL 5:net start MySQL57

  • 启动 MySQL 8:net start MySQL80

2. 连接并修改密码(以 MySQL 5 为例,MySQL 8 操作类似,注意更换端口):

  • 连接时必须使用 -P(大写)指定端口

    mysql -u root -P 3306 -h 127.0.0.1
  • 修改密码:

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
    FLUSH PRIVILEGES;

✅ 验证与日常使用

  • 验证端口:在 CMD 中运行 netstat -ano | findstr :3306​ 和 netstat -ano | findstr :3307​,确认两个端口都处于 LISTENING 状态。

  • 日常连接:之后连接不同版本的 MySQL,只需在命令中指定不同的 -P 端口即可。

    • 连接 MySQL 5:mysql -u root -p -P 3306 -h 127.0.0.1

    • 连接 MySQL 8:mysql -u root -p -P 3307 -h 127.0.0.1

⚠️ 常见问题与解决

  1. 服务名冲突:如果之前安装过默认的 MySQL 服务,不指定服务名安装会覆盖。务必使用 --install 唯一服务名 来区分。

  2. 初始化失败:检查 my.ini​ 中 basedir​ 和 datadir​ 路径是否正确,且 datadir​ 指向的数据目录必须为空,否则会因 server-uuid 冲突导致启动失败。

  3. 无法连接:检查防火墙是否放行了 3306​ 和 3307​ 端口。同时,MySQL 8.0 使用了新的密码认证插件,连接时若遇到认证问题,可在 my.ini​ 的 [mysqld]​ 下添加 default_authentication_plugin=mysql_native_password

  4. 环境变量冲突:建议不要将两个 MySQL 的 bin​ 目录都加入系统 Path 环境变量,以免 mysql 命令指向混乱。可以通过在命令中指定完整路径,或只添加常用版本的路径来解决。

  5. 服务管理命令

    > mysqld --install MySQL57 --defaults-file="......\mysql-5.7.44-winx64\my.ini"
    Service successfully installed.
    ​
    > net start MySQL57
    MySQL57 服务正在启动 .
    MySQL57 服务已经启动成功。
    ​
    > sc delete MySQL57
    [SC] DeleteService 成功
    ​
    # 若出现删除失败的情况,可以尝试重启电脑解决
    > sc delete MySQL57
    [SC] DeleteService 失败 1072:
    ​
    指定的服务已标记为删除。

额外说明

1. 初始化时生成一个临时随机密码的操作步骤

初始化时将 --initialize-insecure​ 换成 --initialize,会生成临时密码,注意在安装完成前不要关闭命令行窗口,或保存好临时密码,否则需要重新安装。

mysqld --initialize --console
Untitled 5.png

启动mysql服务

net start mysql
Untitled 6.png

使用前面复制的临时密码登录mysql

mysql -uroot -p(oe.hF:6?h.y
Untitled 7.png

修改临时密码

alter user root@localhost identified by 'NewPassword';

刷新系统表,使新密码生效

flush privileges;
Untitled 8.png

2. 若 datadir 不为空,且需要保留原有数据时的操作步骤

⚠场景示例和建议:mysql绿色版安装在非系统盘D盘,重装系统后,mysql安装目录存在旧数据,且需要保留旧数据,则可以使用此步骤。该步骤同样适用于将绿色版mysql转移到其他机器,即将mysql目录打包,解压到新机器,然后执行此步骤即可。

  1. 确认 my.ini 中以下配置正确

    [mysqld]
    port=3306
    basedir=D:/env/mysql-5.7.36-winx64/
    datadir=D:/env/mysql-5.7.36-winx64/data/
    # 建议加上,避免旧数据的时间戳警告
    explicit_defaults_for_timestamp=true
  2. 安装服务(不需要初始化数据库)

    以管理员身份打开 CMD,切换到 MySQL 5.7 的 bin 目录:

    cd /d D:\env\mysql-5.7.36-winx64\bin

    然后​直接安装服务​(注意服务名要唯一,比如 MySQL57):

    mysqld --install MySQL57 --defaults-file="D:\env\mysql-5.7.36-winx64\my.ini"

    看到 Service successfully installed. 即成功。

  3. 启动服务

    net start MySQL57
  4. 连接测试

    mysql -u root -p -P 3306 -h 127.0.0.1
    (使用旧密码登录即可)