摘要: 本文详细介绍如何在 Windows 系统上同时安装和配置 MySQL 5.7 和 8.0.27 两个版本,实现完美共存。通过独立端口、服务名和数据目录的配置,让两个版本互不冲突,满足不同项目的数据库需求。
为什么需要双版本共存
在实际开发中,我们经常会遇到以下场景:
- 项目兼容性: 老项目使用 MySQL 5.7,新项目需要 MySQL 8.0 的新特性
- 功能测试: 需要对比不同版本的功能差异
- 学习研究: 了解 MySQL 版本演进过程
- 平滑迁移: 逐步从旧版本迁移到新版本
通过双版本共存,我们可以:
- 同时运行两个版本的 MySQL 服务
- 独立管理各自的数据库和配置
- 避免版本冲突和数据丢失
- 灵活切换使用不同版本
系统架构设计
核心设计原则
| 组件 | MySQL 5.7 | MySQL 8.0.27 |
|---|---|---|
| 服务名 | MySQL57 | MySQL80 |
| 端口 | 3306 | 3307 |
| 数据目录 | 独立目录 | 独立目录 |
| 配置文件 | 独立配置 | 独立配置 |
| X Protocol | 不支持 | 33060 |
网络端口分配
┌─────────────────┬────────┬─────────────────────┐
│ 服务 │ 端口 │ 用途 │
├─────────────────┼────────┼─────────────────────┤
│ MySQL 5.7 │ 3306 │ 主数据库服务 │
│ MySQL 8.0.27 │ 3307 │ 新版本数据库服务 │
│ MySQL 8.0 X协议 │ 33060 │ X Protocol连接 │
└─────────────────┴────────┴─────────────────────┘
安装前准备
目录结构规划
D:\Mysql\
├── mysql-5.7.19-winx64\ # MySQL 5.7 安装目录
│ └── mysql-5.7.19-winx64\
│ ├── bin\ # 可执行文件
│ ├── data\ # 数据目录
│ ├── my.ini # 配置文件
│ └── ...
├── mysql-8.0.27-winx64\ # MySQL 8.0.27 安装目录
│ ├── bin\ # 可执行文件
│ ├── data\ # 数据目录
│ ├── my.ini # 配置文件
│ └── ...
├── MySQLfiles\ # 共享文件目录
└── MysqlGUI\ # 客户端工具
└── SQLyog\
环境变量配置
:: 设置MySQL 5.7环境变量
set MYSQL57_HOME=D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64
set PATH=%MYSQL57_HOME%\bin;%PATH%
::设置MySQL 8.0.27环境变量
set MYSQL80_HOME=D:\Mysql\mysql-8.0.27-winx64
set PATH=%MYSQL80_HOME%\bin;%PATH%
MySQL 5.7 配置详解
配置文件位置
D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\my.ini
核心配置内容
[client]
port=3306
default-character-set=utf8
[mysqld]
# ==================== 基础配置 ====================
basedir=D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\
datadir=D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\data\
port=3306
server-id=1
# ==================== 字符集配置 ====================
character-set-server=utf8
collation-server=utf8_general_ci
# ==================== 网络配置 ====================
bind-address=0.0.0.0
max_connections=200
wait_timeout=28800
interactive_timeout=28800
# ==================== 内存配置 ====================
query_cache_size=32M
query_cache_type=1
tmp_table_size=32M
max_heap_table_size=32M
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=8M
join_buffer_size=2M
# ==================== InnoDB配置 ====================
innodb_buffer_pool_size=256M
innodb_log_file_size=64M
innodb_log_buffer_size=8M
innodb_flush_method=O_DIRECT
# ==================== 安全配置 ====================
skip-name-resolve
symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
# ==================== 日志配置 ====================
log-error=D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\data\mysql_error.log
slow_query_log=1
slow_query_log_file=D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\data\mysql_slow.log
long_query_time=2
log-bin=mysql-bin
binlog_format=ROW
expire_logs_days=7
# ==================== 其他配置 ====================
default-storage-engine=INNODB
lower_case_table_names=1
thread_cache_size=8
table_open_cache=2000
table_definition_cache=1400
open_files_limit=65535
服务安装命令
:: 切换到MySQL 5.7 bin目录
cd /d "D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\bin"
:: 安装MySQL 5.7服务
mysqld --install MySQL57 --defaults-file="D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\my.ini"
:: 启动服务
net start MySQL57
MySQL 8.0.27 配置详解
配置文件位置
D:\Mysql\mysql-8.0.27-winx64\my.ini
核心配置内容
[client]
port=3307
default-character-set=utf8mb4
[mysqld]
# ==================== 基础配置 ====================
basedir=D:\Mysql\mysql-8.0.27-winx64\
datadir=D:\Mysql\mysql-8.0.27-winx64\data\
port=3307
server-id=2
# ==================== 字符集配置 ====================
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
# ==================== 网络配置 ====================
bind-address=0.0.0.0
max_connections=200
max_user_connections=50
wait_timeout=28800
interactive_timeout=28800
# ==================== 内存配置 ====================
tmp_table_size=32M
max_heap_table_size=32M
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=8M
join_buffer_size=2M
# ==================== InnoDB配置 ====================
innodb_buffer_pool_size=256M
innodb_log_file_size=64M
innodb_log_buffer_size=8M
innodb_flush_method=O_DIRECT
innodb_file_format=Barracuda
# ==================== 安全配置 ====================
skip-name-resolve
symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
# ==================== 日志配置 ====================
log-error=D:\Mysql\mysql-8.0.27-winx64\data\mysql_error.log
slow_query_log=1
slow_query_log_file=D:\Mysql\mysql-8.0.27-winx64\data\mysql_slow.log
long_query_time=2
log-bin=mysql-bin
binlog_format=ROW
expire_logs_days=7
# ==================== 其他配置 ====================
shared-memory
enable-named-pipe
default-storage-engine=INNODB
lower_case_table_names=1
thread_cache_size=8
table_open_cache=2000
table_definition_cache=1400
open_files_limit=65535
服务安装命令
:: 切换到MySQL 8.0.27 bin目录
cd /d "D:\Mysql\mysql-8.0.27-winx64\bin"
:: 安装MySQL 8.0.27服务
mysqld --install MySQL80 --defaults-file="D:\Mysql\mysql-8.0.27-winx64\my.ini"
:: 启动服务
net start MySQL80
服务安装与启动
手动安装步骤
-
安装 MySQL 5.7 服务:
:: 切换到MySQL 5.7 bin目录 cd /d "D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\bin" :: 安装MySQL 5.7服务 mysqld --install MySQL57 --defaults-file="D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\my.ini" :: 启动服务 net start MySQL57 -
安装 MySQL 8.0.27 服务:
:: 切换到MySQL 8.0.27 bin目录 cd /d "D:\Mysql\mysql-8.0.27-winx64\bin" :: 安装MySQL 8.0.27服务 mysqld --install MySQL80 --defaults-file="D:\Mysql\mysql-8.0.27-winx64\my.ini" :: 启动服务 net start MySQL80 -
设置服务自动启动:
sc config MySQL57 start= auto sc config MySQL80 start= auto
连接测试与验证
手动连接测试
-
测试 MySQL 5.7 连接:
:: 切换到MySQL 5.7 bin目录 cd /d "D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\bin" :: 连接MySQL 5.7 mysql -u root -p -P 3306 -
测试 MySQL 8.0.27 连接:
:: 切换到MySQL 8.0.27 bin目录 cd /d "D:\Mysql\mysql-8.0.27-winx64\bin" :: 连接MySQL 8.0.27 mysql -u root -p -P 3307
版本信息查询
-- 连接MySQL 5.7 (端口3306)
mysql -u root -p -P 3306
-- 查询版本信息
SELECT VERSION();
SELECT @@port;
SELECT @@datadir;
SELECT @@basedir;
-- 连接MySQL 8.0.27 (端口3307)
mysql -u root -p -P 3307
-- 查询版本信息
SELECT VERSION();
SELECT @@port;
SELECT @@datadir;
SELECT @@basedir;
客户端工具配置
SQLyog 连接配置
MySQL 5.7 连接配置
| 参数 | 值 |
|---|---|
| 连接名 | MySQL 5.7 |
| 主机地址 | localhost |
| 端口 | 3306 |
| 用户名 | root |
| 密码 | 您的密码 |
| 数据库 | 留空 |
MySQL 8.0.27 连接配置
| 参数 | 值 |
|---|---|
| 连接名 | MySQL 8.0.27 |
| 主机地址 | localhost |
| 端口 | 3307 |
| 用户名 | root |
| 密码 | 您的密码 |
| 数据库 | 留空 |
命令行客户端配置
连接 MySQL 5.7:
cd /d "D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\bin"
mysql -u root -p -P 3306
连接 MySQL 8.0.27:
cd /d "D:\Mysql\mysql-8.0.27-winx64\bin"
mysql -u root -p -P 3307
常见问题解决方案
1. 端口冲突问题
:: 检查端口占用
netstat -an | findstr :3306
netstat -an | findstr :3307
:: 如果端口被占用,可以修改配置文件中的端口号
2. 服务启动失败
:: 检查服务状态
sc query MySQL57
sc query MySQL80
:: 查看错误日志
type "D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\data\mysql_error.log"
type "D:\Mysql\mysql-8.0.27-winx64\data\mysql_error.log"
3. SQLyog 连接问题
问题:Plugin caching_sha2_password could not be loaded
解决方案:
-- 连接MySQL 8.0.27
mysql -u root -p -P 3307
-- 修改认证方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
4. InnoDB 数据文件问题
问题:The innodb_system data file ‘ibdata1’ must be writable
解决方案:
:: 停止所有MySQL进程
taskkill /f /im mysqld.exe
:: 删除数据目录
rmdir /s /q "D:\Mysql\mysql-8.0.27-winx64\data"
:: 重新初始化
cd /d "D:\Mysql\mysql-8.0.27-winx64\bin"
mysqld --initialize --console
:: 启动服务
net start MySQL80
服务管理
基本服务管理命令
启动服务:
net start MySQL57 :: 启动MySQL 5.7
net start MySQL80 :: 启动MySQL 8.0.27
停止服务:
net stop MySQL57 # 停止MySQL 5.7
net stop MySQL80 # 停止MySQL 8.0.27
查看服务状态:
sc query MySQL57 # 查看MySQL 5.7状态
sc query MySQL80 # 查看MySQL 8.0.27状态
检查端口监听:
netstat -an | findstr :3306 :: 检查MySQL 5.7端口
netstat -an | findstr :3307 :: 检查MySQL 8.0.27端口
查看日志文件:
:: 查看MySQL 5.7错误日志
type "D:\Mysql\mysql-5.7.19-winx64\mysql-5.7.19-winx64\data\mysql_error.log"
:: 查看MySQL 8.0.27错误日志
type "D:\Mysql\mysql-8.0.27-winx64\data\mysql_error.log"
1977

被折叠的 条评论
为什么被折叠?



