Windows Server + IIS 部署 MySQL 关键配置

Windows Server + IIS 部署 MySQL 关键配置

Windows Server 上部署 IIS + PHP + MySQL 的经典组合,遇到一些常见的”小问题”很坑人:上传文件失败、表损坏报错。下面把两个最关键的配置点整理一下。

MySQL 5.6.17 安装

Windows 平台使用 mysql-installer-community-5.6.17.0 安装包,注意事项:

  • 安装路径避免中文和空格,否则后续迁移/备份会有路径问题
  • 安装类型选 Developer DefaultServer only,按需勾选 Connector/Workbench
  • 设置 root 密码时务必记住,字符集选 utf8mb4 避免中文乱码
  • 安装完成后 MySQL 默认监听 3306 端口,仅本机(localhost)可连,需要远程访问时在 my.ini 中把 bind-address = 127.0.0.1 注释掉

IIS 下 PHP 站点的 temp 目录权限

这是 IIS 部署 PHP 时最常遇到的”上传失败”问题:PHP 的会话、上传临时文件默认放在 C:\Windows\Temp,而 IIS 的 PHP 工作进程用的是 IUSR / IIS_IUSRS / Network Service 账号,需要给 temp 文件夹加权限。

具体操作:

  1. 右键 C:\Windows\Temp → 属性 → 安全 → 编辑 → 添加
  2. 分别添加以下三个账户并给”完全控制”或”修改”权限:
账户 说明
IUSR IIS 匿名访问账号(IUSR_
IIS_IUSRS IIS 工作进程组,PHP-FastCGI 通常用这个身份运行
Network Service 旧版 IIS 默认工作账号

如果不加这些权限,PHP 上传时会报”找不到临时文件夹”、”没有写权限”等错误,且 IIS 日志里看不到明显异常。

另一种方案是用 PHP 的 upload_tmp_dir 指定到独立目录,然后单独给那个目录加权限,更可控。

MySQL 表损坏修复

MySQL 表损坏常见表现:

  • 启动时报 Table 'xxx' is marked as crashed and should be repaired
  • 查询时报 Can't open file: 'xxx.frm' (errno: 145)
  • 某些行无法读取

修复命令:

1
REPAIR TABLE mytable USE_FRM

参数说明:

  • REPAIR TABLE:标准修复命令,会尝试重建索引并保留数据
  • USE_FRM:当 .frm 文件存在但 MySQL 状态信息损坏时,强制使用 .frm 重建表结构描述,再尝试从数据文件中恢复

适用场景:MySQL 服务器异常关闭、磁盘空间耗尽、断电后表可能处于不一致状态。

其他修复手段:

1
2
3
4
5
6
7
8
-- 轻量级修复(先尝试)
REPAIR TABLE mytable;

-- 检查表状态
CHECK TABLE mytable EXTENDED;

-- 从 .frm + .ibd 备份手工恢复(进阶)
ALTER TABLE mytable ENGINE=InnoDB;

如果 REPAIR TABLE USE_FRM 仍无法修复,且数据极重要,可以从备份恢复,或者用 innodb_force_recovery = 1 启动 MySQL 后导出数据。

小结

两个看似小的配置——IIS 三个账号权限和 REPAIR TABLE USE_FRM——是 Windows + IIS + MySQL 部署中最容易踩坑的环节。提前配置好能避免大量”诡异”问题的排查时间。