现象
部署环境为Windows 10通过WSL2与Docker Desktop搭建的FastGPT私有部署环境,MySQL服务无法正常启动,伴随OneAPI持续重启。启动日志中出现明确错误信息:mysqld: Cannot change permissions of the file 'private_key.pem.temp' (OS errno 1 - Operation not permitted),以及Could not set file permission for private_key.pem,同时伴随SSL初始化失败、GTID表无法打开等警告信息,最终MySQL服务启动失败并终止。
可能原因
核心报错指向文件权限操作失败,结合WSL2的文件权限映射机制,大概率是MySQL容器挂载的数据目录权限配置不符合运行要求。Windows文件系统与WSL2容器内Linux权限存在映射差异,导致容器内运行的mysql用户无法修改密钥文件的权限。具体版本信息未明确,需按实际部署环境确认配置细节。
排查步骤
- 执行
docker logs [mysql容器名或ID]命令,查看MySQL容器的完整启动日志,确认是否存在Cannot change permissions of the file 'private_key.pem.temp'这类权限相关核心报错。 - 进入WSL2终端,定位docker-compose.yml中配置的MySQL数据卷挂载路径,检查该目录的权限与所有者属性。
- 检查Docker Desktop的WSL2集成配置,确认文件权限映射未被异常限制,避免跨系统权限不匹配。
- 进入MySQL数据卷挂载目录,删除已有的密钥相关文件(如privatekey.pem、privatekey.pem.temp等),重启MySQL容器,观察是否能自动生成合法密钥并启动成功。
解决与验证
解决方法可分为两步:首先调整数据目录权限,在WSL2终端中执行sudo chown -R 999:999 [你的MySQL数据目录路径],将目录所有者设置为容器内mysql用户的默认UID与GID,确保容器内进程拥有读写权限。其次,若问题仍存在,可将MySQL数据目录迁移至WSL2原生文件系统,避免Windows NTFS分区与Linux容器的权限映射冲突。 验证时,重启MySQL容器,确认日志中不再出现权限相关报错,MySQL服务正常启动后,检查OneAPI是否停止持续重启。可通过docker logs [oneapi容器名或ID]命令查看OneAPI日志,确认数据库连接正常,无连接失败报错。