☰
KEPServerEX连接MySQL:32位ODBC与DSN配置避坑指南
2026/10/31 7:20:47 网站建设 项目流程

简介:这份面向工业数据采集初学者的实操文档,围绕 KEPServerEX 如何把现场数据写入 MySQL 数据库这一常见需求展开,覆盖从软件安装配置到数据导入的完整链路。内容包含 KEPServerEX 6.4 的安装与破解要点、MySQL 数据库的定制安装流程与管理员密码设置、Navicat 可视化管理工具的安装及离线激活步骤,并特别强调 ODBC 驱动必须选用 32 位版本这一易错细节,最后给出使用 Excel 导入数据到数据库的具体做法,可帮助读者避开驱动位数不匹配、服务占用导致补丁覆盖失败等常见问题。包内共 1 个 PDF 文件,约 3.89MB,篇幅精炼,按安装模块分节排版,便于对照操作逐步执行。已有 2631 人学习,适合从事工业自动化、SCADA 系统集成以及需要打通 Kepserver 与关系型数据库数据通路的工程师参考。

1. 装之前先对版本:Kepserver 连接 MySQL 最容易崩在驱动位数上

上周帮人复现一套 Kepserver 连接 MySQL 的环境,机器是干净的 Windows 10 64 位,KEPServerEX 6.4 装完、MySQL 装完、Navicat 也能连上,结果一到建 DSN 这一步就卡住:ODBC 数据源管理器里死活看不到 MySQL 的驱动。折腾了四十分钟才发现,他打开的是System32目录下那个 64 位的管理器,而 KEPServerEX 6.4 是 32 位进程,它只认 32 位驱动和 32 位 DSN。这类翻车在工控数据采集现场太常见了——不是装不上,是装上了对不上号。整套链路其实就四件事:KEPServerEX 装好、MySQL 立起来、Navicat 能管、32 位 ODBC 打通,任何一环位数错位,后面全是白干。这篇写给第一次搭这套环境的人,也写给被 64 位驱动坑过一次、想找份能对着抄的清单的人。

2. 装 KEPServerEX 6.4:从管理员权限到服务全停

装 KEPServerEX 6.4 这一段,表面上就是一路下一步,真正决定后面能不能连库的,是三件容易被忽略的事:安装包必须以管理员身份跑、安装类型选典型、以及替换安装目录下的组件文件之前必须把所有 KEPServerEX 服务停干净。第三件事没做,覆盖文件时会提示文件被占用,很多人以为是安装包坏了,其实是服务还在后台跑着。

2.1 安装之前先把环境对齐

KEPServerEX 6.4 是 32 位应用,跑在 64 位 Windows 上没问题,但它调用的所有 ODBC 组件都必须是 32 位版本,这一条会贯穿全文。系统层面我一般确认这几项:Windows 7 SP1 及以上或 Windows 10/11,管理员账户(不是把 UAC 关掉就完事,是安装时真的右键“以管理员身份运行”),磁盘留出至少 2 GB 给程序目录和日志,安装期间把杀毒软件的实时防护临时放行安装目录——工控软件写服务和注册表项的动作多,实时扫描拦一下就会变成“装到一半回滚”。

另外提前确认端口占用。KEPServerEX 默认用 49345 之类的本地端口做运行时通信,如果这台机器上已经跑着别的采集软件,装完启动会报运行时无法初始化。查一下并不费事:

# 查看常见运行时端口是否已被占用 netstat -ano | findstr "49345" # 列出所有 KEPServerEX 相关服务及其状态,装之前应该是空的 sc query type= service state= all | findstr /i "KEPServer"

第一行是确认端口空闲,第二行是确认这台机器上没装过旧版本或者装过但没卸干净。如果第二行有输出、状态是RUNNING,先卸载旧版再装,两版共存的服务名冲突会让新装的服务起不来。这一步我见过太多次“装了两遍都失败”的现场,最后一查是残留服务占着名字。

安装包建议放在本地磁盘,不要放网络共享路径。KEPServerEX 安装过程中会多次回读自身文件,网络路径断一下就直接失败,报错信息还很不友好。

2.2 一路“典型”安装,示例和文档别取消勾选

双击KEPServerEX6.4.exe之后,第一屏是许可提示,点 OK 继续;接下来的向导里,安装类型选“典型(Typical)”,不要选自定义精简。典型安装会带上常用设备驱动和运行时组件,后面建通道、建设备都靠这些驱动,精简安装省的那点空间最后要花十倍时间补回来。

到组件选择那一步,会有一个“安装示例和文档”的勾选项。很多人习惯性取消,觉得示例没用。这套环境里我建议留着:示例工程里带现成的通道和设备结构,配 ODBC 那一步如果标签建不出来,可以直接拿示例对照字段名和数据类型,比翻文档快。文档在本地也省得现场没网的时候抓瞎。

装完不要急着点完成就打开主界面。先确认服务状态:

# 装完之后应该能看到运行时服务处于 RUNNING sc query type= service state= all | findstr /i "KEPServer" # 查看安装目录,确认主程序和服务组件都在 Get-ChildItem "C:\Program Files (x86)\KEPServerEX\6.4" -Filter "*.exe" | Select-Object Name

第一行确认服务已注册并启动;第二行确认主程序目录路径。注意路径里的Program Files (x86)——这是 32 位程序的默认落点,也再次说明为什么后面必须用 32 位 ODBC 驱动。如果服务是STOPPED,手动启动一次,起不来就看 Windows 事件查看器的应用程序日志,通常是权限或端口问题。

2.3 覆盖组件文件之前,服务必须全部停干净

如果手上有授权配套的组件文件需要放到安装目录(不同渠道拿到的授权方式不一样,具体形式以你手上的为准),覆盖动作本身有严格顺序,顺序错了就是“文件被占用,无法复制”。

顺序是三步:先关托盘程序,再停服务,最后覆盖。

托盘程序在任务栏右下角,右键 KEPServerEX 图标退出。这一步只是关掉界面进程,服务还在跑。接着打开任务管理器的“服务”选项卡,把所有名字里带 KEPServerEX 的服务逐个右键停止——注意是“所有”,6.4 通常不止一个服务,只停主服务,剩下的仍会锁着 DLL。用命令行更保险,能一次停全:

# 列出全部 KEPServerEX 服务名 $svc = Get-Service | Where-Object { $_.Name -like "*KEPServer*" -or $_.DisplayName -like "*KEPServer*" } $svc | Select-Object Name, Status # 逐个停止,已停止的会跳过 $svc | Where-Object { $_.Status -eq 'Running' } | Stop-Service -Force # 复核,输出里不应该再有 Running $svc | Select-Object Name, Status

Get-Service用名称和显示名双重匹配,是因为不同版本的服务命名不完全一致,只按KEPServer前缀过滤可能漏。Stop-Service -Force会连带停掉依赖该服务的子服务,比在图形界面一个个点更彻底。最后一步复核不能省——我遇到过服务显示已停止、实际进程还在的情况,用Get-Process再确认一遍更稳:

# 兜底:确认没有残留进程锁着安装目录 Get-Process | Where-Object { $_.Path -like "*KEPServerEX*" } | Select-Object Id, ProcessName, Path

输出为空,才可以把组件文件复制到安装目录覆盖。复制完再按相反顺序把服务启动起来。如果覆盖之后主程序打不开、或者服务起不来,第一件事是把原文件从备份还原——所以覆盖之前把安装目录里的同名文件另存一份,这个习惯能省掉一次重装。

3. MySQL 与 Navicat:先把数据库这头立起来

KEPServerEX 是数据来源,MySQL 是落点,中间靠 ODBC 串起来。数据库这头装不稳,后面 DSN 建得再对也写不进数据。这一段分三块:MySQL 用自定义安装挑组件、管理员密码和服务的初始化确认、Navicat 装完先连一次验证账号权限。

3.1 MySQL 自定义安装:组件别贪多,端口和字符集先定死

MySQL 安装向导第一步点安装,接受许可后到安装类型选择,选“Custom”。选自定义不是为了炫技,是因为“Developer Default”会塞一堆用不上的组件(比如示例库、可视化工具、 Connector 全家桶),装完还要手动清理。自定义里我一般只勾这几项:MySQL Server、MySQL Connector/ODBC(注意位数,后面单独讲)、以及可选的 MySQL Shell。客户端工具用 Navicat 就够了,不用重复装。

勾选完点下一步,向导会把所选组件列出来,确认后开始安装。安装完成进入配置阶段,这里几个参数要提前想好:

端口默认 3306,如果这台机器上已经跑着别的 MySQL 实例,改成 3307 之类,并且记住这个端口——后面 Navicat 和 ODBC 都要填,填错一个数字就是“连接被拒绝”。

字符集建议显式选utf8mb4。默认走latin1或者随系统区域设置走,工控现场采集的标签名、设备名里带中文是常事,字符集不对导进去就是一堆问号,而且这种问题往往要等到数据落库之后才发现。

服务名保持默认的MySQL或MySQL80都行,勾上“开机自启动”。工控机断电重启是常态,不自启意味着每次恢复都要人工上去点一下。

3.2 管理员密码与服务初始化确认

配置向导里会要求设置 root 密码。这一步别图省事用弱密码,也别用带特殊字符到影响命令行的组合——后面 ODBC 的 DSN 配置里要填这个密码,某些特殊字符在连接串里需要转义,新手很容易在这里卡住。用大小写字母加数字的 12 位左右就够。

点 Execute 之后向导会依次执行初始化、启动服务、应用安全设置。每一行前面出现绿色勾才算过,中途有红叉就展开看日志,别硬着头皮点下一步。全部过了点 Finish。

装完先做命令行验证,别急着开图形工具:

# 用刚设的密码登录,-P 指定端口,如果改过端口这里要跟着改 mysql -u root -p -P 3306 -h 127.0.0.1 # 登录后确认版本、字符集、认证插件 SELECT VERSION(); SHOW VARIABLES LIKE 'character_set_server'; SELECT user, host, plugin FROM mysql.user WHERE user = 'root';

第一条命令能进去,说明服务、端口、密码三样都对。第二条看版本和字符集,character_set_server应该是utf8mb4。第三条最关键,看plugin字段:MySQL 8.0 默认是caching_sha2_password,而不少老版本的 ODBC 驱动和采集软件只认mysql_native_password。这个差异会在第四节和第五节反复出现,先记下来。

如果这台机器要给采集程序单独开账号,别直接用 root:

-- 建一个只对目标库有权限的采集账号,host 限定本机 CREATE USER 'collector'@'localhost' IDENTIFIED WITH mysql_native_password BY '换成你的密码'; CREATE DATABASE IF NOT EXISTS factory_data DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; GRANT ALL PRIVILEGES ON factory_data.* TO 'collector'@'localhost'; FLUSH PRIVILEGES;

这里显式用IDENTIFIED WITH mysql_native_password,就是为了绕开认证插件不兼容的坑。库名factory_data是示例,实际按项目命名。GRANT只给目标库权限而不是*.*,采集账号不需要那么大权限,出问题的时候影响面也小。

3.3 Navicat 安装与首次连接

Navicat 的安装本身没什么门槛,接受条款、一路下一步到完成。激活环节按你手上的授权方式走官方流程,完成后进入主界面。这里提醒一句:激活过程中如果涉及断网操作,做完记得把网络恢复,不然后面 ODBC 驱动下载、MySQL 组件补装都会受影响。

装完第一件事是建连接,把刚才的库连上:

连接名:local-factory 主机:127.0.0.1 端口:3306 用户名:collector 密码:(3.2 里设的密码)

点“测试连接”,通了再保存。这里有个小细节:主机填127.0.0.1而不是localhost,某些环境下localhost会走命名管道或 socket,而 ODBC 那边走的是 TCP,两边行为不一致会让排查变得混乱。统一用 IP,后面 DSN 也填 IP,出问题的时候变量少一个。

连上之后在 Navicat 里把表结构建出来。Data Logger 写入的表至少要有一个时间戳字段和若干数值字段,字段类型跟标签的数据类型对上:

-- 采集落库表:时间戳 + 三个测点,字段类型与标签类型对应 CREATE TABLE factory_data.tag_log ( log_time DATETIME NOT NULL, tag_temp DECIMAL(10,2) NULL, tag_press DECIMAL(10,2) NULL, tag_status INT NULL, PRIMARY KEY (log_time) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

log_time做主键是为了避免重复写入同一时刻的数据,如果采集频率很高、同一秒可能有多条,就把主键改成自增 ID 加普通索引。DECIMAL(10,2)对应模拟量,INT对应状态量。字段名尽量用英文小写加下划线,某些驱动对大小写和特殊字符的处理不一致,名字简单能省掉一类玄学问题。

4. 32 位 ODBC 驱动:整条链路的胜负手

前面所有步骤都顺,最后卡在 DSN 建不出来的情况,十次里有八次是驱动位数。这一节把原理和操作一起说清楚,因为只记命令不理解原理,换个机器又会错。

4.1 为什么必须是 32 位驱动

Windows 的 ODBC 有两套并存的驱动管理器和驱动集合:64 位的那套在C:\Windows\System32,32 位的那套在C:\Windows\SysWOW64。注意这个命名是反直觉的——64 位系统里System32放的是 64 位组件,SysWOW64放的反而是 32 位组件。

一个进程只能加载与自己位数相同的 ODBC 组件。KEPServerEX 6.4 是 32 位进程,它调用 ODBC 时会去找 32 位的驱动管理器,而 32 位管理器只认 32 位驱动、只读 32 位用户/系统 DSN。所以哪怕你装了 MySQL 官方的 64 位 Connector/ODBC,在 32 位管理器里也是看不到的;反过来,你在 32 位管理器里建好的 DSN,用 64 位程序去查也查不到。

这就解释了一个很典型的现象:MySQL 装好了、64 位驱动也装了、用 64 位程序测 ODBC 完全正常,但 KEPServerEX 就是连不上、下拉框里空空如也。不是配置错了,是打开错了窗口。

4.2 装 32 位驱动并打开正确的管理器

先确认机器上现在有什么:

# 查看已安装的 ODBC 驱动,分别从 32 位和 64 位管理器读取 Get-OdbcDriver -Platform 32Bit | Where-Object { $_.Name -like "*MySQL*" } | Select-Object Name, Platform Get-OdbcDriver -Platform 64Bit | Where-Object { $_.Name -like "*MySQL*" } | Select-Object Name, Platform

第一条有输出、第二条空,说明只装了 32 位,正是我们要的。如果第一条为空,就去装 32 位版本:MySQL 官网的 Connector/ODBC 安装包分 x86 和 x64,文件名里带x86或32的那个才是。注意别被“我的系统是 64 位”误导,这里要的是“我的调用方是 32 位”。

安装时选“Typical”即可,装完再跑一次上面的命令确认。驱动版本上,8.0 系列的驱动连 MySQL 8.0 没问题,连 5.7 也兼容,但如果目标库是 5.7 而驱动是 8.0,认证插件那一关还是要按 3.2 的做法处理。

打开正确的管理器只需一条命令:

# 打开 32 位 ODBC 数据源管理器(不是控制面板里那个) C:\Windows\SysWOW64\odbcad32.exe

控制面板 → 管理工具 → ODBC 数据源,在 64 位系统上打开的是 64 位版。别走那条路,直接执行上面这条命令。窗口标题栏不会明确写位数,判断方法是看“驱动程序”选项卡里有没有你刚装的 MySQL 驱动。

4.3 系统 DSN 的参数逐项配置

在 32 位管理器里切到“系统 DSN”选项卡,点添加,选 MySQL ODBC 驱动,弹出配置框。参数一项项对:

参数填什么为什么
Data Source Namedsn_factoryDSN 名字,后面 KEPServerEX 里要原样选这个
TCP/IP Server127.0.0.1与 Navicat 保持一致,避免 socket 与 TCP 行为差异
Port3306与 MySQL 实例端口一致,改过就填改后的
Usercollector采集专用账号,不要用 root
Password3.2 设的密码系统 DSN 会保存,注意机器权限管理
Databasefactory_data下拉选,选不到说明账号没权限或库名拼错
Character Setutf8mb4与建库时的字符集一致,防中文乱码

填完点“Test”,弹出 Connection successful 才算过。测试失败时先别改参数,先看错误码:1045是账号密码错,2003是端口或服务不通,2059是认证插件不兼容——最后这个就是前面说的caching_sha2_password,回 3.2 改成mysql_native_password再试。

DSN 建好后可以顺手用注册表复核一下,确认它确实落在 32 位分支里:

# 32 位系统 DSN 在 WOW6432Node 分支下 Get-ItemProperty "HKLM:\SOFTWARE\WOW6432Node\ODBC\ODBC.INI\dsn_factory" | Select-Object Driver, Server, Port, Database

能看到Driver指向 Connector/ODBC 的 DLL 路径,说明 DSN 建对了位置。如果这条命令报路径不存在,说明 DSN 建到了 64 位分支,回去用SysWOW64那个管理器重建。

5. 避坑与排查:五条踩过的记录

这一段按“现象 → 原因 → 解决”写,每条都是现场真遇到过的,顺序大致按出现频率排。

现象一:ODBC 数据源里看不到 MySQL 驱动,但驱动明明装了。原因:打开的是 64 位 ODBC 管理器,或者装的是 64 位驱动而调用方是 32 位程序。解决:直接执行C:\Windows\SysWOW64\odbcad32.exe,再用Get-OdbcDriver -Platform 32Bit确认驱动在 32 位分支下可见。

现象二:覆盖组件文件时提示“文件正在被另一个程序使用”。原因:KEPServerEX 的服务没有全部停止,或者托盘程序还在后台。解决:按 2.3 的顺序,先退托盘、再用Get-Service批量停服务、最后用Get-Process确认无残留进程,三步做完再覆盖。覆盖前备份原文件。

现象三:DSN 测试连接报Authentication plugin 'caching_sha2_password' cannot be loaded。原因:MySQL 8.0 默认认证插件是caching_sha2_password,当前 ODBC 驱动版本不认。解决:把采集账号改成mysql_native_password,命令见 3.2 的CREATE USER ... IDENTIFIED WITH mysql_native_password;已有账号用ALTER USER 'collector'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';改。改完FLUSH PRIVILEGES。

现象四:数据写进去了,但中文标签名全是问号。原因:三处字符集不一致——MySQL 服务端、表、DSN 连接参数,任何一处不是utf8mb4都会断在中间。解决:先用SHOW VARIABLES LIKE 'character_set_%'看服务端,再确认建表语句带了DEFAULT CHARSET=utf8mb4,最后回 ODBC 配置里把 Character Set 填成utf8mb4,三处对齐。

现象五:Navicat 能连,KEPServerEX 连不上,DSN 测试却正常。原因:DSN 建成了“用户 DSN”而不是“系统 DSN”,KEPServerEX 的服务以系统账户运行,读不到当前登录用户的用户 DSN。解决:删掉用户 DSN,在系统 DSN 选项卡下重建;建完用 4.3 的注册表命令确认落在HKLM分支而不是HKCU。

提示:这五条里有三条最终都指向“位数”和“字符集”两个根因。排查时先问自己这两句,能省掉一大半试错。

6. 装完怎么验证:从 Excel 导数据到 KEPServerEX 读到值

环境装完不能只看“没报错”,要跑一遍端到端。我的验证顺序是从数据库这头往采集那头推,因为越靠近数据库的环节越容易定位。

第一步,用 Navicat 把 Excel 数据导进tag_log表,验证写库通路。打开 Navicat,右键目标表选“导入向导”,文件类型选 Excel,选中你的 xlsx,下一步到字段映射。这一步唯一要盯的是列名和表字段的对应关系——Excel 里的中文表头在映射界面会显示乱码或者对不上,改成按列序号映射更稳。导入模式选“追加”,别选“复制”,复制会重建表把字段类型冲掉。导完在表上右键“刷新”,行数对得上就说明数据库这头的写入没问题。

第二步,回 32 位 ODBC 管理器,把dsn_factory的“Test”再点一次。这一步确认驱动层没被前面的导入操作影响(有时改过权限或者重启过服务,DSN 会失效)。

第三步,打开 KEPServerEX 主界面,建通道和设备,建两三个标签,模拟量给个固定值或者用仿真驱动出一组数。然后在 Data Logger 里新建日志组,数据源选dsn_factory,目标表选tag_log,把标签和字段一一映射上,触发方式选“定时”并设成 5 秒一次,启动日志组。

第四步,也是最关键的一步,回 Navicat 查表:

-- 按时间倒序看最近写入的记录,确认时间戳在往前走 SELECT log_time, tag_temp, tag_press, tag_status FROM factory_data.tag_log ORDER BY log_time DESC LIMIT 10; -- 统计最近五分钟的写入条数,5 秒一条的话应该是 60 条左右 SELECT COUNT(*) AS cnt FROM factory_data.tag_log WHERE log_time >= NOW() - INTERVAL 5 MINUTE;

第一行看数据内容:字段值是不是你在 KEPServerEX 里设的那个,时间戳是不是当前时间。第二行看节奏:5 秒一条,五分钟应该是 60 条上下,偏差太大说明定时器没生效或者日志组被暂停了。如果表里有数据但时间是旧的,多半是日志组启动了但通道没在跑;如果表里一条没有,回 ODBC 管理器点 Test,从驱动层往上查。

验证通过之后再回头做两件收尾的事:把 KEPServerEX 的日志组配置导出备份一份,把dsn_factory的参数(不含密码)记进项目的部署文档。这套环境的参数组合很容易失传,换个人接手时光是猜 DSN 名字就能耗半天。

从那以后我每次搭这套环境,都会在装完驱动之后先跑一遍“32 位管理器打开、Get-OdbcDriver -Platform 32Bit确认、系统 DSN 建好、注册表核位”这四步,再往下走配置。看着多花五分钟,实际省的是后面那种“每步都正常但就是不通”的排查时间。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询