一台电脑怎么装两个mysql数据库
- 数据库
- 2025-08-17
- 4
my.cnf,并设置环境变量
核心原理与前提条件
同一台物理机可并行运行多个MySQL实例的核心在于「差异化标识」——通过不同端口号+独立数据目录+专属配置文件的组合实现隔离,需满足以下基础条件:
充足硬件资源(建议单实例预留至少2GB内存)
操作系统级权限管理能力(Windows/Linux均可)
对MySQL内部机制有一定了解(如套接字通信、进程管理)
实施方案详解(以Windows为例)
| 环节 | 原生实例(Instance A) | 新增实例(Instance B) | 作用说明 |
|---|---|---|---|
| 监听端口 | 3306 | 3307 | 网络层唯一标识符 |
| 数据根目录 | C:data_mysql_a | D:data_mysql_b | 存储数据的物理位置 |
| 配置文件 | my-default.ini | my-instanceB.ini | 定义各实例专属参数 |
| 服务名称 | MySQL | MySQL_Second | 系统服务管理器中的别名 |
| PID文件 | mysqld_a.pid | mysqld_b.pid | 进程跟踪文件 |
| 错误日志 | error_a.log | error_b.log | 故障排查依据 |
分步操作指南
第一步:准备基础环境
-
获取安装介质
从官网下载相同版本号的ZIP压缩包两次(例:mysql-8.0.35-winx64),分别解压至不同目录:X:mysql_base → 原始安装包 X:mysql_backup → 备用副本 -
创建数据存储分区
新建两个空文件夹作为数据目录:C:data_mysql_a (主实例) D:data_mysql_b (副实例)️ 注意:后续所有涉及路径的操作均需保持此结构一致性
第二步:配置主实例(A)
-
复制基础配置文件模板
将X:mysql_basedatamy-default.ini复制到C:data_mysql_a目录下,重命名为my.ini。 -
关键参数修改
编辑C:data_mysql_amy.ini,重点修改项:[mysqld] basedir = "X:\mysql_base" # 指向实际安装目录 datadir = "C:\data_mysql_a" # 数据存储位置 port = 3306 # 默认端口 character-set-server=utf8mb4 # 字符集设置 sql_mode=NO_ENGINE_SUBSTITUTION # 禁用严格模式
-
初始化数据库
以管理员身份打开CMD,执行:cd X:mysql_basebin mysqld --initialize-insecure --console --datadir="C:data_mysql_a"
️ 成功标志:末尾显示”ready for connect”
第三步:部署副实例(B)
-
生成独立配置文件
复制my-default.ini到D:data_mysql_b,改名为my.ini[mysqld] basedir = "X:\mysql_base" datadir = "D:\data_mysql_b" port = 3307 # 变更端口号 socket = "D:/tmp/mysql_b.sock" # Unix域套接字路径 log-error = "D:\data_mysql_b\error_b.log" pid-file = "D:\data_mysql_b\mysqld_b.pid"
-
二次初始化
同样执行初始化命令:mysqld --initialize-insecure --console --datadir="D:data_mysql_b"
-
注册系统服务
创建名为”MySQL_Second”的新服务:sc create MySQL_Second binPath= "X:mysql_basebinmysqld.exe" ^ startParams= "--defaults-file=D:data_mysql_bmy.ini" ^ displayName= "MySQL Second Instance" ^ description= "Secondary MySQL Server"
第四步:启动与验证
-
启动双实例
- 主实例:通过「服务」面板启动”MySQL”服务
- 副实例:启动”MySQL_Second”服务
-
连接测试
| 目标实例 | 连接命令 | 预期结果 |
|———-|————————————–|————————|
| A |mysql -h127.0.0.1 -P3306 -uroot| 进入主库命令行界面 |
| B |mysql -h127.0.0.1 -P3307 -uroot| 进入副库命令行界面 | -
可视化工具配置
Navicat/DBeaver等工具需新建两个连接配置:Connection A: Host=localhost Port=3306 Connection B: Host=localhost Port=3307
高级管理技巧
动态切换实例
在终端中使用USE语句前缀指定目标实例:
-查询主实例状态 mysql -S /var/run/mysqld/mysqld_a.sock -e "SHOW PROCESSLIST;" -查询副实例状态 mysql -S /var/run/mysqld/mysqld_b.sock -e "SHOW GRANTS FOR 'root'@'%';"
资源监控
通过任务管理器观察两个mysqld.exe进程的资源占用情况,推荐使用Process Lasso进行智能限流。
自动重启策略
编写批处理脚本实现联级控制:
@echo off REM 启动顺序:先主后副 net start MySQL timeout /T 5 net start MySQL_Second REM 停止顺序:先副后主 net stop MySQL_Second timeout /T 5 net stop MySQL
FAQs
Q1: 启动副实例时报”Can’t connect to MySQL server on ‘localhost’ (10061)”怎么办?
诊断思路:
- 检查端口占用:
netstat -ano | findstr 3307确认无其他程序占用 - 核对配置文件中的
port与socket路径是否正确 - 查看错误日志
D:data_mysql_berror_b.log获取具体报错信息
典型修复方案:删除残留锁文件rm -f D:data_mysql_bauto.cnf后重新初始化
Q2: 如何让两个实例互相访问?
跨实例通信配置步骤:
- 在主实例创建远程用户:
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'SecurePass123!'; GRANT ALL PRIVILEGES ON . TO 'remote_user'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
- 在副实例执行:
CREATE USER 'cross_access'@'127.0.0.1' IDENTIFIED BY 'TempPass456'; GRANT SELECT ON db_name. TO 'cross_access'@'127.0.0.1';
- 测试连接:
mysql -h127.0.0.1 -P3307 -ucross_access -p
