当前位置: 首页 > news >正文

Windows 本地程序执行脚本踩坑记录:MySQL 初始化失败,最后发现竟然是“找错了数据库”

最近在做一个 Windows 本地部署的软件激活功能时,遇到了一个非常“隐蔽”的问题。

功能本身其实不复杂:

  • 用户激活程序
  • 程序执行 .bat 脚本
  • 自动初始化数据库
  • 导入 SQL 文件

结果现场一直初始化失败,而且最离谱的是:有时候能成功,有时候失败,同样的安装包,在不同电脑表现还不一样

一开始真的挺懵的。后来一路排查,才发现问题根本不是 SQL,也不是权限,而是:脚本连错 MySQL 了。

@echo off
echo [INFO] 脚本启动中...
SETLOCAL ENABLEDELAYEDEXPANSION
set purchasePackage=%~1
if "%purchasePackage%"=="" (echo [ERROR] 未指定 SQL 文件名exit /b 1
)echo [INFO] 目标 SQL 文件:%purchasePackage%
echo [INFO] 正在从注册表读取安装路径...
for /f "tokens=1,2,*" %%i in ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Ericsson\***\Install" /v InstallPath ^| find /i "InstallPath"') do set "regvalue=%%k"
if not defined regvalue (echo [ERROR] 无法从注册表获取安装路径exit /b 1
)echo [INFO] 安装路径:%regvalue%
set "pid="
set "port="
for /f "tokens=2 delims=:" %%a in ('sc queryex "mysql" ^| findstr /i "pid"') do set "pid=%%a"
for /f "tokens=2" %%i in ('netstat -ano ^| findstr %pid%') do (set port=%%ibreak;
)
set port=%port:~-4,4%
echo [INFO] 找到 MySQL 进程 PID: %pid%
echo [INFO] 识别到的 MySQL 端口: %port%
cd /d %~dp0
cd %regvalue%\***\E***mysql\mysql\binset "log_dir=D:\***_Logs"
if not exist "%log_dir%" mkdir "%log_dir%"
set "temp_log=%log_dir%\mysql_import_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%.log"echo [INFO] 开始执行数据库导入操作...
".\mysql.exe" -uroot -proot -P%port% -D main < "%regvalue%\E***\E***\sql\%purchasePackage%" > "%temp_log%" 2>&1
set "mysql_exit_code=%errorlevel%"echo [INFO] 执行完数据库导入操作...
cd /d %~dp0
cd %regvalue%\E***\E****_mysql\sql
if "%mysql_exit_code%"=="0" (echo [SUCCESS] 数据库导入成功del %purchasePackage%exit /b 0
) else (echo [FAIL] 数据库导入失败,退出码:%mysql_exit_code%type "%temp_log%"exit /b %mysql_exit_code%
)

这是一个 Windows 本地部署程序。

激活时会执行一个批处理脚本,大概流程:

  1. 从注册表读取软件安装目录
  2. 找到 MySQL 安装路径
  3. 获取 MySQL 运行端口
  4. 调用 mysql.exe
  5. 执行 SQL 初始化数据

核心执行语句类似这样:

".\mysql.exe" -uroot -proot -P%port% -D main < xxx.sql

逻辑看起来完全没问题。

但现场就是会失败。

增加日志打印有时候由于编码问题,端口号一开始没打印出来,还是在乱猜,后面重新看才注意到的,所以写脚本还是要把日志打印齐全一点,不然排查起来麻烦:

echo [INFO] 找到 MySQL 进程 PID: %pid%
echo [INFO] 识别到的 MySQL 端口: %port%

结果终于发现异常。

最开始我的脚本是这样获取 MySQL 进程的:

tasklist | findstr mysql

Windows 电脑里可能有很多 MySQL:

  • MySQL 5.7
  • MySQL 8
  • Navicat 自带
  • WAMP
  • XAMPP
  • 开发环境数据库

而:

tasklist 只能告诉你:
当前有哪些 mysql.exe

但它并不知道:哪个才是你程序自己的 MySQL

于是:脚本随机取到了别人的 MySQL。

最终导致:端口不对,数据库不存在,初始化失败

后来改成了:

sc queryex "mysql"

通过:

Windows 服务名

精准获取对应服务的 PID。

代码:

for /f "tokens=2 delims=:" %%a in ('sc queryex "mysql" ^| findstr /i "pid"') do set "pid=%%a"

然后再通过:

netstat -ano

获取对应 PID 的端口。

这样就不会串了。

因为:

服务名 -> PID -> 端口

是一条精准链路。

而不是:

mysql.exe -> 随便找一个

为什么这个方案更可靠,因为 Windows 上:进程名可能重复但服务名通常唯一

例如:

mysql
mysqld
MySQL80
MariaDB

都可能存在。

所以:通过服务名找 PID,才是更稳定的方式。

给做 Windows 本地部署程序的一些建议

一定要打印日志不要怕日志多

不要通过进程名定位服务优先:服务名 -> PID -> 端口

不要:tasklist 找 mysql.exe

一定考虑用户电脑已有环境用户电脑可能已经有:

  • Java
  • Redis
  • MySQL
  • Python
  • Nginx

你的程序不一定是唯一的。路径一定加引号Windows 批处理里:"%path%"几乎是必须的。

http://www.jsqmd.com/news/811896/

相关文章:

  • 2025-2026年国内顶级品牌咨询公司推荐:七大机构评测助力品牌升级避免增长瓶颈 - 品牌推荐
  • 医药化工防爆刷子工具高性价比推荐榜:防爆机动套筒工具/防爆螺丝旋工具/防爆錾子工具/防爆钳子工具/防爆锤子工具/选择指南 - 优质品牌商家
  • 2026惠州市防水补漏公司权威推荐:卫生间、阳台、屋顶、地下室、飘窗、外墙漏水,专业防水公司TOP5口碑榜+全维度测评(2026年5月最新深度行业资讯) - 防水百科
  • 2025-2026年全球智能床品牌推荐:五款口碑好的评测儿童睡眠防跌落注意事项 - 品牌推荐
  • 2026常州专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月常州最新深度调研方案) - 防水百科
  • 2026佛山专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月佛山最新深度调研方案) - 防水百科
  • 50 Nginx的Gzip模块配置指令(一)
  • OpenAI Codex 桌面版与命令行版完整配置与迁移指南
  • 2026泰州专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月泰州最新深度调研方案) - 防水百科
  • SQL 入门 14:SQL 触发器与事件:自动化数据处理
  • 卧槽,26M参数跑函数调用!Gemini被蒸馏成马蜂窝袖珍模型
  • 2026东莞专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月东莞最新深度调研方案) - 防水百科
  • 前端开发中常用的 Shell 脚本命令有哪些?
  • 2026淮安专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月淮安最新深度调研方案) - 防水百科
  • 2026年新疆包车旅游选哪家?人数配置、服务体验与性价比全解析 - 科技焦点
  • 2026湖州专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月湖州最新深度调研方案) - 防水百科
  • 2026.5.13
  • 2026扬州专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月扬州最新深度调研方案) - 防水百科
  • 2026绍兴专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月绍兴最新深度调研方案) - 防水百科
  • 2025-2026年全球储能消防解决方案公司推荐:五家数据中心场景避免灭火残留痛点口碑好的评测注意事项 - 品牌推荐
  • 2026宿迁专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月宿迁最新深度调研方案) - 防水百科
  • 2026年性价比高的新疆包车旅游团:车队配置、服务标准与价格体系全解析 - 科技焦点
  • 2026南通专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月南通最新深度调研方案) - 防水百科
  • 2026丽水专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月丽水最新深度调研方案) - 防水百科
  • 2026嘉兴专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月嘉兴最新深度调研方案) - 防水百科
  • 2026宁波专业防水公司TOP5推荐:卫生间、外墙、楼顶、地下室渗漏专业公司推荐(2026年5月宁波最新深度调研方案) - 防水百科
  • 广州企业破产重组全领域专业律师推荐,蒋阳兵律师团队真实案例可验证 - TOP10品牌推荐榜单
  • Vue 2 升级到 Vue 3 后渲染性能提升明显吗?
  • C++学习(26_05_13)
  • 高端装备首选!广东犸力压力传感器排名替代进口 - 品牌速递