Windows 10 下使用同一套 MySQL 8.0.22 创建第二个独立实例
当前环境示例:
- Windows 10
- MySQL 8.0.22
- MySQL 安装目录:
E:\mysql-8.0.22-winx64- 现有实例端口:
3306本教程只创建一个新的独立 MySQL 服务,不配置主从复制。
文章目录
- [Windows 10 下使用同一套 MySQL 8.0.22 创建第二个独立实例](#Windows 10 下使用同一套 MySQL 8.0.22 创建第二个独立实例)
-
- 一、最终目标
- 二、创建第二个数据目录
- 三、创建第二个实例的配置文件
- [四、初始化第二个 MySQL 实例](#四、初始化第二个 MySQL 实例)
- [五、注册第二个 Windows 服务](#五、注册第二个 Windows 服务)
- [六、启动第二个 MySQL 服务](#六、启动第二个 MySQL 服务)
- 七、连接第二个实例
- 八、确认连接的是第二个实例
- 九、验证两个实例的数据互不影响
- 十、常用服务管理命令
- 十一、最终结构
一、最终目标
在同一套 MySQL 程序文件下运行两个互不干扰的 MySQL 实例:
| 实例 | 端口 | 数据目录 | Windows 服务名 |
|---|---|---|---|
| 原实例 | 3306 |
E:\mysql-8.0.22-winx64\data |
原有服务 |
| 新实例 | 3307 |
E:\mysql-8.0.22-winx64\data-3307 |
MySQL80_3307 |
两个实例可以共用同一个 mysqld.exe,但必须使用不同的端口、数据目录和配置文件。
二、创建第二个数据目录
在 MySQL 安装目录下新建:
text
E:\mysql-8.0.22-winx64\data-3307
该目录必须是空目录,绝对不要让第二个实例使用原来的
data目录。
三、创建第二个实例的配置文件
在:
text
E:\mysql-8.0.22-winx64
新建配置文件:
text
my-3307.ini
内容如下:
ini
[mysqld]
# MySQL程序安装目录
basedir=E:/mysql-8.0.22-winx64
# 第二个实例独立的数据目录
datadir=E:/mysql-8.0.22-winx64/data-3307
# 第二个实例使用3307端口,避免与原3306实例冲突
port=3307
# MySQL 8的X Protocol端口也要与原实例区分
mysqlx_port=33070
# 默认字符集
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 第二个实例独立的错误日志
log_error=E:/mysql-8.0.22-winx64/data-3307/mysql3307.err
# 默认使用"mysql_native_password"插件认证
default_authentication_plugin=mysql_native_password
# 设置mysql group cancat最大长度 -1为最大
group_concat_max_len=102400
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
这里暂时不配置 server_id、Binlog、Relay Log 等复制参数,后面正式学习主从复制时再增加。
四、初始化第二个 MySQL 实例
以管理员身份 打开 CMD,进入 MySQL 的 bin 目录:
bat
REM 进入MySQL程序目录
cd /d E:\mysql-8.0.22-winx64\bin
执行初始化:
bat
REM 按my-3307.ini初始化新的数据目录,root暂时不设置密码
mysqld.exe --defaults-file="E:\mysql-8.0.22-winx64\my-3307.ini" --initialize-insecure --console
执行成功后,data-3307 中会生成 MySQL 系统库及 InnoDB 等相关文件。
--initialize-insecure会创建一个初始root账户,但暂时没有密码,只适合本地学习环境。后面连接成功后应立即设置密码。
如果初始化时报"数据目录非空"等错误,只处理新建的 data-3307,不要误删原来的 data 目录。

五、注册第二个 Windows 服务
仍然使用管理员 CMD,执行:
bat
REM 将第二个实例注册为独立Windows服务
mysqld.exe --install MySQL80_3307 --defaults-file="E:\mysql-8.0.22-winx64\my-3307.ini"
正常情况下会看到类似:
text
Service successfully installed.
这里要注意命令顺序:--install 服务名 --defaults-file=配置文件,不要把 --defaults-file 放到 --install 前面。
六、启动第二个 MySQL 服务
执行:
bat
REM 启动第二个MySQL实例
net start MySQL80_3307
也可以通过 Win + R → services.msc 打开 Windows 服务管理器,此时应该能看到新增加的 MySQL80_3307。
七、连接第二个实例
进入 MySQL bin 目录后执行:
bat
REM 通过TCP明确连接3307端口的新实例
mysql.exe -h127.0.0.1 -P3307 -uroot --protocol=TCP
因为初始化时使用了 --initialize-insecure,第一次连接暂时不需要密码。
连接成功后立即设置 root 密码:
sql
-- 为第二个实例的root账号设置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
八、确认连接的是第二个实例
执行:
sql
-- 查看当前MySQL实例的端口
SELECT @@port;
-- 查看当前MySQL实例的数据目录
SELECT @@datadir;
-- 查看当前MySQL版本
SELECT VERSION();
-- 查看当前连接ID
SELECT CONNECTION_ID();
预期看到端口为 3307,数据目录为 E:\mysql-8.0.22-winx64\data-3307\。
原来的 MySQL 实例仍然应该是端口 3306、数据目录 E:\mysql-8.0.22-winx64\data。

九、验证两个实例的数据互不影响
连接 3307 实例后创建一个测试库:
sql
-- 只在3307实例中新建测试库
CREATE DATABASE instance3307_test;
-- 查看当前实例的数据库
SHOW DATABASES;

十、常用服务管理命令
bat
REM 启动第二个MySQL服务
net start MySQL80_3307
REM 停止第二个MySQL服务
net stop MySQL80_3307
REM 查看Windows服务的实际启动配置
sc qc MySQL80_3307
如果以后不再需要该实例,可以先停止服务,再删除服务注册:
bat
REM 先停止第二个MySQL服务
net stop MySQL80_3307
REM 删除Windows服务注册
sc delete MySQL80_3307
删除 Windows 服务并不会自动删除
data-3307数据目录。是否删除数据目录应由自己确认,避免误删数据。
十一、最终结构
text
E:\mysql-8.0.22-winx64
│
├─ bin
│ ├─ mysqld.exe
│ └─ mysql.exe
│
├─ data
│ └─ 原3306实例的数据
│
├─ data-3307
│ └─ 新3307实例的数据
│
├─ my.ini
│ └─ 原3306实例配置
│
└─ my-3307.ini
└─ 新3307实例配置
最终运行关系:
text
同一套MySQL程序
↓
┌─────────────────┬─────────────────┐
│ │ │
3306实例 3307实例
原data目录 data-3307目录
原配置文件 my-3307.ini
原Windows服务 MySQL80_3307
核心原则:多个 MySQL 实例可以共用程序文件,但端口、数据目录和实例配置必须彼此独立。
到这里仅完成了第二个独立 MySQL 服务的创建,还没有建立任何主从复制关系。
