Win下使用同一套MySQL创建第二个独立实例

Windows 10 下使用同一套 MySQL 8.0.22 创建第二个独立实例

当前环境示例:

  • Windows 10
  • MySQL 8.0.22
  • MySQL 安装目录:E:\mysql-8.0.22-winx64
  • 现有实例端口:3306

本教程只创建一个新的独立 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 服务的创建,还没有建立任何主从复制关系。

相关推荐
晚风叙码4 小时前
MySQL 数据类型详解:从数值到字符串,一篇讲透
android·mysql·adb
做运维的阿瑞5 小时前
SQL 面试高频:用户、商品、订单三表查询全解析
数据库·sql·mysql
CJi0NG6 小时前
【自用】MySQL - 语法:DDL、DML、DQL、DCL
数据库·mysql
一技安身7 小时前
【mysql】Windows MySQL 8.4.10 绿色免安装喂饭教程
windows·mysql·adb
斯内普吖7 小时前
(开源)宠物饲养系统实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源·宠物
ao-weilai7 小时前
MySQL数据库:表约束
数据库·mysql·adb
FYKJ_201010 小时前
springboot心理健康管理系统86254-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·mysql·django·课程设计
做运维的阿瑞10 小时前
MYSQL从语义到执行计划:UNION、EXISTS、IN 的深度辨析
数据库·sql·mysql
小马同学-21 小时前
MySQL主从复制和读写分离
数据库·mysql
海绵宝宝转agent21 小时前
MySql高频面试八股开源笔记总结
mysql·面试·开源