以下是 Windows Server 2022 上安装 MySQL 5.7.21 多实例的最完整指南,涵盖从安装、配置、初始化到生产优化的所有细节。
适用于 16GB 内存服务器,包含完整参数说明及字符集强制规则(UTF8MB4
)。
一、准备工作
1. 下载与目录规划
- MySQL ZIP包下载:
从 MySQL Archives 选择 mysql-5.7.21-winx64.zip
。 - 目录规划:
C:\
├── mysql-5.7.21 # MySQL主程序目录(解压到此)
└── mysql-instances # 多实例根目录
├── instance1 # 实例1
│ ├── data # 数据目录(需手动创建)
│ └── my.ini # 配置文件
└── instance2 # 实例2
├── data
└── my.ini
2. 解压主程序
# 解压下载的ZIP包到C:\mysql-5.7.21目录
二、配置多实例文件
1. 实例1配置文件 (C:\mysql-instances\instance1\my.ini
)
[client]
port=3306
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
prompt=(\\u@\\h:\p) [\\d]>\\_
[mysqld]
# =================== 核心参数 ===================
port=3306
basedir=C:/mysql-5.7.21
datadir=C:/mysql-instances/instance1/data
socket=mysql-instance1.sock
server-id=1# 主从复制需唯一
# ======== 字符集强制配置 ========
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
skip-character-set-client-handshake=1
# ======== 内存与连接优化 ========
max_connections=800# 最大连接数(按业务调整)
innodb_buffer_pool_size=5G # 关键参数(占内存60%)
innodb_log_buffer_size=64M
key_buffer_size=256M # MyISAM缓存(非必要可降低)
thread_cache_size=100# 线程缓存(max_connections * 25%)
table_open_cache=2000# 打开表的缓存数量
tmp_table_size=256M
max_heap_table_size=256M
query_cache_type=0# 关闭查询缓存(生产建议)
query_cache_size=0
# ======== InnoDB引擎优化 ========
innodb_flush_log_at_trx_commit=1# 数据安全优先(1=每次提交刷盘)
innodb_flush_method=O_DIRECT # 避免双缓冲
innodb_file_per_table=1# 启用独立表空间
innodb_log_file_size=1G # 日志大小(建议缓冲池25%~50%)
innodb_log_files_in_group=2# 日志组数量
innodb_io_capacity=2000# SSD建议2000-4000
innodb_thread_concurrency=0# 自动调整并发
innodb_read_io_threads=8# 读线程数(SSD建议8-16)
innodb_write_io_threads=8# 写线程数
innodb_purge_threads=4# 清理线程数
# ======== 日志与安全 ========
log-error=error.log # 错误日志路径
slow_query_log=1# 开启慢查询
slow_query_log_file=slow.log # 慢查询日志路径
long_query_time=2# 慢查询阈值(秒)
log-bin=mysql-bin # 二进制日志(主从必需)
expire_logs_days=7# 自动清理7天前binlog
binlog_format=row # 行级复制模式
binlog_row_image=full
skip_name_resolve=1# 禁用DNS解析
secure_file_priv=C:/secure # 限制文件导入导出路径
local_infile=0# 禁止本地文件加载
# ======== 网络与超时 ========
max_allowed_packet=256M # 允许最大数据包
wait_timeout=300# 非交互连接超时(秒)
interactive_timeout=300# 交互连接超时(秒)
# ======== 安全加固 ========
symbolic-links=0# 禁用符号链接
performance_schema=ON# 启用性能监控
explicit_defaults_for_timestamp=1# 显式时间戳声明
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION # 严格模式
[mysqld_safe]
log-error=error.log
2. 实例2配置文件 (C:\mysql-instances\instance2\my.ini
)
# 差异部分:
[client]
port=3307
[mysqld]
port=3307
server-id=2
datadir=C:/mysql-instances/instance2/data
socket=mysql-instance2.sock
log-bin=mysql-bin2 # 二进制日志文件名区分
slow_query_log_file=slow2.log # 日志文件独立
三、初始化与安装服务
1. 初始化数据目录
# 以管理员身份运行CMD(必须!)
# ---------------------------
# 实例1初始化(生成随机密码)
cd C:\mysql-5.7.21\bin
mysqld --defaults-file=C:\mysql-instances\instance1\my.ini --initialize --console
# 输出末尾会显示临时root密码(如:`root@localhost: abcdefgh1234`)
# 实例2初始化
mysqld --defaults-file=C:\mysql-instances\instance2\my.ini --initialize --console
2. 安装Windows服务
# 实例1服务安装
mysqld install MySQLInstance1 --defaults-file="C:\mysql-instances\instance1\my.ini"
# 实例2服务安装
mysqld install MySQLInstance2 --defaults-file="C:\mysql-instances\instance2\my.ini"
3. 启动服务
net start MySQLInstance1
net start MySQLInstance2
四、首次登录与密码重置
1. 连接数据库
# 连接实例1(使用初始随机密码)
mysql -u root -P 3306 -p --protocol=tcp
2. 修改root密码
ALTERUSER'root'@'localhost' IDENTIFIED BY'YourNewStrongPassword!';
FLUSH PRIVILEGES;
五、验证与调优
1. 检查字符集
SHOW VARIABLES LIKE'character_set%';
SHOW VARIABLES LIKE'collation%';
-- 确保所有值均为 `utf8mb4` 及 `utf8mb4_unicode_ci`
2. 检查实例运行状态
# 查看服务状态
sc query MySQLInstance1
sc query MySQLInstance2
# 检查端口监听
netstat -ano | findstr :3306
netstat -ano | findstr :3307
六、生产环境必做操作
1. 安全加固
- 创建专用业务账号(禁止使用root远程登录):
CREATEUSER'app_user'@'%' IDENTIFIED BY'SecurePass123!';
GRANTSELECT, INSERT, UPDATEON your_db.*TO'app_user'@'%';
- 配置防火墙规则:仅允许应用服务器IP访问3306/3307端口。
2. 备份策略
- 物理备份(推荐 Percona XtraBackup):
# 备份实例1
xtrabackup --backup --defaults-file=C:\mysql-instances\instance1\my.ini --target-dir=D:\backup\instance1
- 逻辑备份:
mysqldump -u root -P 3306 -p --single-transaction --routines --events --databases your_db > backup.sql
3. 监控配置
- Prometheus + Grafana:使用
mysqld_exporter
监控指标。 - 慢查询分析:定期使用
pt-query-digest
分析 slow.log
。
七、常见问题处理
1. 服务启动失败排查
- 检查错误日志:
C:\mysql-instances\instance1\error.log
。 - 常见错误
- 端口冲突:
netstat -ano | findstr :3306
确认端口未被占用。 - 路径错误:检查
my.ini
中 datadir
是否实际存在。
2. 卸载服务
# 停止并删除服务
net stop MySQLInstance1
sc delete MySQLInstance1
附录:参数说明表
| | |
|---|
innodb_buffer_pool_size
| | |
innodb_flush_log_at_trx_commit
| | |
max_connections
| | |
thread_cache_size
| | |
innodb_io_capacity
| | |
slow_query_log
| | |
log-bin
| | |
通过以上步骤,您已完成 高可用、生产级、UTF8MB4兼容的 MySQL 多实例部署。