简介:《Kepserver连接MySQL》是一份面向工业数据采集与数据库对接初学者的操作文档,围绕 Kepserver 与 MySQL 的连接配置展开,适合需要完成设备数据入库、SCADA/OPC 数据转存或课程实验的技术人员参考。资源包共 1 个 PDF 文件,大小约 3.89MB,内容集中在一份文档内,便于按章节查阅。文档涵盖 Kepserver 安装与运行准备、MySQL 数据库部署、Navicat 可视化管理工具配置、32 位 ODBC 驱动安装,以及通过 Excel 向数据库导入数据等关键环节,并对连接过程中的常见配置要点和注意事项作了梳理。目前已有 2631 人学习,可作为搭建 Kepserver 到 MySQL 数据链路时的对照材料,帮助读者理解各软件之间的配合关系、驱动选择要求与整体实施流程,减少在环境准备和连接调试阶段反复试错的时间。
1. 从一次 Kepserver 连 MySQL 失败说起:版本和位数先对齐
上周在一台 Windows 工控机上,Kepserver 6.4 已经能正常采集设备数据,MySQL 服务也在跑,Navicat 连本机数据库一点问题没有;可 Kepserver 里新建 ODBC Client 设备时,测试连接一直提示找不到驱动。排查到最后不是数据库密码错,也不是端口被占,而是 64 位系统里默认打开的 ODBC 管理器把 DSN 建到了 64 位那边,Kepserver 要用的却是 32 位驱动。这个场景在工控数据落库项目里太常见了:Kepserver、MySQL、Navicat、ODBC 四个东西版本和位数没对齐,装完看着都正常,一连接就翻车。下面按我实际装机的顺序,把 KEPServerEX 6.4、MySQL、Navicat、32 位 ODBC 驱动和 Excel 导入数据这条链路拆开,适合第一次搭这套环境的人照着走,也适合已经装过但卡在 DSN 和位数上的熟手对照。
2. 安装 KEPServerEX 6.4:管理员权限、典型安装和补丁覆盖顺序
Kepserver 这一端最容易出问题的不是安装向导,而是安装完之后的补丁覆盖。很多人双击 exe 一路下一步,装完直接开软件,结果服务已经在后台跑起来,补丁文件覆盖时提示被占用,最后只能重装。我的习惯是先把安装包、补丁文件、安装目录路径三样东西放在同一个管理员桌面会话里,避免中途切换用户导致权限不够。
2.1 安装前先把服务状态和目录规划清楚
安装前先确认机器上没有旧版 Kepserver 服务残留。旧服务没清干净,新装 6.4 后可能出现两个服务名接近的实例,后面停服务时你以为停完了,其实还有一个在跑。常见做法是先在管理员 PowerShell 里查一遍:
# 查看是否已有 KEPServerEX 相关服务,安装前先确认没有旧实例在跑 Get-Service | Where-Object { $_.Name -like "*KEPServer*" -or $_.DisplayName -like "*KEPServer*" } | Select-Object Name, DisplayName, Status, StartType这段命令只做一件事:把服务名或显示名里带 KEPServer 的项列出来。Status是 Running 的先记下来,StartType是 Automatic 的也记下来。如果机器是全新的,结果为空最省事;如果有旧版本,先停服务再决定是升级还是卸载,不要直接覆盖安装。安装目录我一般保持默认,通常落在C:\Program Files (x86)\下的 Kepserver 安装目录里,后面补丁覆盖和日志排查都按这个路径找。安装包右键选择“以管理员身份运行”,不要双击直接开,UAC 拦截会让部分注册表项写不进去。
2.2 典型安装和示例文档的取舍
运行KEPServerEX6.4.exe后,弹窗点 OK,然后一直下一步。到安装类型那一步选“典型”,不要为了省空间去选自定义精简,典型安装会把后面 ODBC Client 驱动、示例配置和文档组件带齐。示例和文档这一步建议勾上,后面查 ODBC Client 设备属性时,本机文档比到处翻网页快。安装路径、开始菜单名称保持默认即可,工控机不是开发机,路径里不要带中文和空格,省得后面服务账户读取配置文件时出玄学问题。
安装完成后先不要急着打开主界面。Kepserver 安装完一般会注册服务并启动运行时,这时候直接覆盖补丁文件,十有八九提示libutil.dll或libserver.dll被占用。正确顺序是:先在任务栏右下角右键 KEPServerEX 图标退出主程序,再打开任务管理器,切到“服务”选项卡,把所有 KEPServerEX 相关服务逐个右键停止。注意是“所有”,不是只停一个运行时服务。停完之后再打开管理员 PowerShell 复核:
# 停止所有 KEPServerEX 服务,给补丁文件覆盖让路 $svc = Get-Service | Where-Object { $_.Name -like "*KEPServer*" -or $_.DisplayName -like "*KEPServer*" } $svc | ForEach-Object { if ($_.Status -eq "Running") { Stop-Service -Name $_.Name -Force Write-Host "已停止服务:" $_.Name } } $svc | Select-Object Name, StatusWhere-Object负责筛出 Kepserver 服务,Stop-Service -Force会强制停止,适合安装维护窗口内使用,生产环境要先确认没有采集任务在跑。最后再列一次Name, Status,确认全部是 Stopped。只有这一步干净了,补丁覆盖才不会出现“文件被占用无法覆盖”。覆盖时把libutil.dll、libserver.dll两个文件复制到安装目录,选择替换目标文件。覆盖完不要立刻启动主程序,先回服务里把 Kepserver 服务启动,再打开主界面看授权状态和运行时是否正常。
提示:补丁文件覆盖前一定确认服务全停,文件被占用时不要反复点重试,先回任务管理器看是否还有 Kepserver 进程残留在跑。
2.3 安装后自检:服务、版本和安装目录三件事
装完 Kepserver 后,我固定做三件事:看服务是否自动启动、看主界面版本是不是 6.4、看安装目录下补丁文件时间是否已经更新。服务没起来,后面 ODBC 测试再对也连不上;版本不对,补丁文件可能不匹配;文件时间没变,说明覆盖根本没成功。可以用下面这段命令做一次快速自检:
# Kepserver 安装后自检:服务状态、安装目录关键文件时间 Get-Service | Where-Object { $_.Name -like "*KEPServer*" } | Select-Object Name, Status, StartType $installDir = "C:\Program Files (x86)\Kepware\KEPServerEX 6" if (Test-Path $installDir) { Get-ChildItem -Path $installDir -Filter "lib*.dll" | Select-Object Name, Length, LastWriteTime } else { Write-Host "安装目录不存在,请按实际路径修改 `$installDir" }$installDir要按你机器上的实际安装目录改,不要照抄。Get-ChildItem看libutil.dll和libserver.dll的LastWriteTime,覆盖成功后时间应该是你刚才复制的时间。如果时间还是安装包原始时间,说明补丁没覆盖进去,回上一步停服务重做。Kepserver 这一端稳了,再去装 MySQL,顺序不要反,否则后面 ODBC 测试失败时你分不清是数据库没起还是 Kepserver 服务没起。
3. MySQL 安装:Custom 选项里把服务端和连接器一次装齐
MySQL 安装向导看起来简单,真正容易漏的是安装类型和后面 ODBC 驱动的位数。很多人选默认安装,装完发现只有服务端没有管理工具,或者 ODBC 驱动装成了 64 位,Kepserver 那边根本不认。我的做法是安装类型选 Custom,把 MySQL Server、管理工具和需要用的连接组件一次选到右边,后面少一次补装。
3.1 Custom 安装步骤和组件选择
运行 MySQL 安装包,点击安装,接受许可协议后下一步。安装类型选择“Custom”,不要选默认的 Developer Default 或 Server Only。Custom 页面左边是可用组件,右边是待安装组件,把 MySQL Server 和管理工具加到右边。ODBC 驱动如果安装包里带 Connector/ODBC,可以先不在这里装,后面单独装 32 位包更稳,因为 Kepserver 要的是 32 位驱动,而安装向导默认可能给你 64 位。选好之后点下一步,一路下一步到账号密码配置。
到设置数据库管理员密码这一步,root 密码要记在密码管理里,不要用空密码,也不要用123456这种。工控机虽然在内网,但 MySQL 一旦被扫到弱口令,后面数据被改了你连恢复都困难。密码设置完点 Execute,等进度条走完,最后完成。安装完成后 MySQL 服务一般会自动启动,服务名通常是MySQL或MySQL80这类,具体看安装时给的实例名。
3.2 建库、建用户和最小权限
MySQL 装完后不要直接用 root 给 Kepserver 用。root 权限太大,ODBC 连接串一旦泄露,整台数据库都能被改。我一般建一个专用库和专用账号,只给 Kepserver 需要的读写权限。先用 Navicat 或命令行登录 root,执行下面这段 SQL:
-- 创建 Kepserver 落库专用数据库,字符集用 utf8mb4,避免中文和特殊符号乱码 CREATE DATABASE IF NOT EXISTS kep_data DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; -- 创建专用账号,localhost 表示只允许本机连接;跨机再按需改成具体网段 CREATE USER IF NOT EXISTS 'kep_user'@'localhost' IDENTIFIED BY '替换成你的强密码'; -- 只给这个库的增删改查权限,不给全局权限 GRANT SELECT, INSERT, UPDATE, DELETE ON kep_data.* TO 'kep_user'@'localhost'; FLUSH PRIVILEGES;utf8mb4是为了兼容中文和表情符号,工控数据里虽然少,但设备名、报警描述里经常有中文。kep_user只允许localhost,因为 Kepserver 和 MySQL 装在同一台机器上,走127.0.0.1最省事。如果 MySQL 和 Kepserver 不在同一台机器,再把localhost改成 Kepserver 所在机器的 IP,同时确认 MySQL 的bind-address和防火墙端口,不要一上来就把 root 开放给所有网段。GRANT只给kep_data.*,不给*.*,这是最小权限原则,后面 ODBC 测试失败时也更容易判断是不是权限问题。
3.3 服务自检和命令行验证
建完库和用户后,先在 MySQL 本机验证账号能连、库能查。可以用命令行,也可以用 Navicat,但命令行更适合排错,因为它不会帮你缓存连接。下面这段命令在 Windows 的 PowerShell 或 CMD 里执行,mysql客户端路径按你安装目录改:
# 用专用账号验证 MySQL 本机连接和库权限 mysql -h 127.0.0.1 -P 3306 -u kep_user -p -D kep_data -e "SELECT DATABASE(), CURRENT_USER(), VERSION();"-h 127.0.0.1强制走 TCP,不走命名管道,和后面 ODBC 的连接方式一致;-P 3306是默认端口,如果你安装时改过端口要同步改;-D kep_data直接选库,执行SELECT DATABASE()能返回kep_data就说明库权限没问题;CURRENT_USER()返回kep_user@localhost说明账号匹配正确;VERSION()只是看版本,不影响连接。如果这一步就报Access denied,先查密码和 host 匹配,不要急着去 ODBC 里试,数据库层没通,ODBC 一定不通。
4. Navicat 管理与 Excel 导入:先建表再灌数据
Navicat 在这套环境里主要干两件事:一是让 MySQL 建库建表、查数据不用整天敲命令行,二是用导入向导把 Excel 里的历史数据灌进数据库。安装本身不复杂,麻烦的是授权环节和导入时的字段映射。我的习惯是先把表结构建好,再用 Excel 导入,导入失败时至少知道是数据问题还是表结构问题。
4.1 Navicat 安装和授权环节的顺序
运行 Navicat 安装包,接受条款,一路下一步到安装完成。安装路径默认即可,不要和 MySQL 安装目录混在一起。安装完成后先不要联网打开,授权环节按你手上的授权方式处理,常见顺序是:断开网络,以管理员身份运行授权工具,先点 Patch,再点 Generate,复制生成的注册码;打开 Navicat,菜单栏“帮助”-“注册”,把注册码粘贴进去,点击激活,选择手动激活;把 Navicat 里生成的请求码复制回授权工具,生成激活码;最后把激活码填回 Navicat 的激活码栏,点击激活完成。按钮名称在不同工具版本里可能略有差异,但顺序不要乱,先 Patch 再 Generate,断网状态下操作,联网后容易触发校验失败。
注意:授权操作只在你已经获得授权的测试或生产环境里做,商用环境按实际授权协议走,不要拿来源不明的补丁往生产机上一盖了事。
授权完成后打开 Navicat,新建 MySQL 连接。连接名随便起,主机填127.0.0.1,端口3306,用户名填kep_user,密码填刚才建账号时的密码。先点“测试连接”,通了再保存。不要用 root 在 Navicat 里长期挂着,后面误操作删库的成本太高。连接建好后打开kep_data库,准备建表。
4.2 建一张能承接 Kepserver 数据的表
表结构不要等 Kepserver 自己建,ODBC Client 驱动对表结构的容忍度没你想的那么高。我一般先手工建一张设备数据表,字段包含时间戳、设备名、点位名、数值和字符串值,够大多数采集场景用。在 Navicat 查询窗口执行:
-- Kepserver 落库示例表:时间戳 + 设备 + 点位 + 数值 + 字符串值 CREATE TABLE IF NOT EXISTS t_plc_data ( id BIGINT NOT NULL AUTO_INCREMENT, collect_time DATETIME NOT NULL, device_name VARCHAR(64) NOT NULL, tag_name VARCHAR(128) NOT NULL, tag_value DECIMAL(18,4) NULL, tag_text VARCHAR(255) NULL, PRIMARY KEY (id), KEY idx_collect_time (collect_time), KEY idx_device_tag (device_name, tag_name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;id用自增主键,避免 Kepserver 写入时还要自己算主键;collect_time用DATETIME,Excel 导入时日期列要提前转成yyyy-mm-dd hh:mm:ss;tag_value用DECIMAL(18,4),浮点采集值够用,不要用FLOAT存金额类数据;tag_text留给字符串点位;两个索引分别服务按时间查询和按设备点位查询。表建好后先用SELECT * FROM t_plc_data LIMIT 10;确认能查,空的也没关系。
4.3 Excel 导入向导的字段映射
Excel 导入走 Navicat 的导入向导:在左侧表列表里右键t_plc_data,选择“导入向导”,文件类型选 Excel,选择你的.xlsx文件。下一步选 Sheet,如果第一行是字段名就勾选“首行包含字段名”。再下一步是字段映射,左边是 Excel 列,右边是表字段,id留空让数据库自增,collect_time对应日期列,device_name、tag_name、tag_value、tag_text按列名对上。日期列如果 Excel 里是文本格式,导入向导里把目标字段类型设成DATETIME,格式选yyyy-mm-dd hh:mm:ss;如果 Excel 里是真日期格式,直接映射通常也能识别。
导入模式选“追加”,不要选“更新”,第一次灌历史数据追加最安全。编码选 UTF-8,Excel 里如果有中文设备名,导入前最好另存为 CSV UTF-8 再导,.xlsx直接导中文偶尔会出乱码。点开始后看进度和错误日志,如果有行失败,先看是不是日期为空、数值列混了文字、字符串超过VARCHAR(255)。导入完成后执行:
-- 导入后校验行数、时间范围和空值情况 SELECT COUNT(*) AS total_rows, MIN(collect_time) AS min_time, MAX(collect_time) AS max_time, SUM(CASE WHEN tag_value IS NULL THEN 1 ELSE 0 END) AS null_value_rows FROM t_plc_data;total_rows和 Excel 行数对不上,说明有行被跳过;min_time、max_time看日期有没有变成0000-00-00;null_value_rows太大,说明数值列映射错了或者 Excel 里本来就有空值。这一步做完,MySQL 里已经有可查的数据,后面 ODBC 测试才有意义。
5. ODBC 32 位驱动与 DSN:配置顺序和四个高频排查点
Kepserver 连 MySQL 的关键不是 Navicat 能连,而是 32 位 ODBC 驱动和系统 DSN 能不能被 Kepserver 服务看见。Navicat 是独立客户端,它自己能连不代表 Kepserver 能连;Kepserver 的 ODBC Client 驱动走的是 Windows ODBC 接口,位数不对、DSN 类型不对,测试一定失败。这一章按“装驱动、建 DSN、配 Kepserver 设备、排查”四步走。
5.1 安装 32 位 MySQL ODBC 驱动
ODBC 驱动必须是 32 位,不能是 x64。64 位 Windows 上默认双击odbcad32.exe打开的是 64 位管理器,你在里面建的 DSN,Kepserver 的 32 位 ODBC Client 看不到。安装驱动时看文件名,带win32或x86的才是 32 位包,带x64的是 64 位。安装过程一路下一步即可,装完用 32 位管理器确认驱动列表里能看到 MySQL ODBC 驱动。打开方式不是从控制面板直接点,而是运行:
# 打开 32 位 ODBC 数据源管理器,64 位系统上必须走 SysWOW64 C:\Windows\SysWOW64\odbcad32.exe这个路径是 32 位 ODBC 管理器的固定入口。打开后切到“驱动程序”选项卡,看列表里有没有 MySQL ODBC 驱动。如果没有,说明你装的是 64 位驱动或者根本没装成功;如果有,再切到“系统 DSN”准备建数据源。也可以用 PowerShell 快速看驱动列表:
# 查看已安装的 ODBC 驱动,重点看 MySQL 相关项 Get-OdbcDriver | Where-Object { $_.Name -like "*MySQL*" } | Select-Object Name, Platform, VersionPlatform列能帮你判断是 32 位还是 64 位,Name里带 MySQL 的项就是后面 DSN 要选的驱动。如果这里只有 64 位没有 32 位,回安装包重装 win32 版本,不要试图在 64 位管理器里建 DSN 糊弄过去。
5.2 建系统 DSN,不要建用户 DSN
在 32 位 ODBC 管理器的“系统 DSN”选项卡里点“添加”,选择 MySQL ODBC 驱动,弹出配置窗口。关键参数如下:
| 参数 | 建议值 | 说明 |
|---|---|---|
| Data Source Name | kep_mysql | Kepserver 设备里要填这个名字,别用中文 |
| TCP/IP Server | 127.0.0.1 | 同机走本机回环,跨机填 MySQL IP |
| Port | 3306 | 和 MySQL 实际端口一致 |
| User | kep_user | 专用账号,不要用 root |
| Password | 你的强密码 | 和 MySQL 里建的一致 |
| Database | kep_data | 下拉选不到就手工填 |
| Character Set | utf8mb4 | 和建库字符集保持一致 |
填完点“Test”测试,成功后再点 OK 保存。为什么强调系统 DSN?因为 Kepserver 服务通常以本地系统账户运行,用户 DSN 只对当前登录用户可见,服务账户读不到。系统 DSN 写在机器级注册表里,服务启动后能直接按名称找到。建完后可以在 32 位管理器里再点一次“配置”-“Test”复核,确认不是保存时密码被截断。
5.3 Kepserver 里新增 ODBC Client 设备
回到 KEPServerEX 6.4 主界面,右键“连接性”新建 Channel,名称比如MySQL_Channel,设备驱动选择 ODBC Client。设备名比如MySQL_Device,在设备属性里填 Data Source 为kep_mysql,User 和 Password 按 DSN 里的专用账号填,扫描模式先用默认或较慢的轮询,别一上来就设毫秒级。建 Tag 时地址格式按 ODBC Client 驱动的要求填表名和列名组合,先用一条只读查询验证,不要直接上写入。
配置完成后右键设备点“测试连接”或打开 OPC Quick Client 看 Tag 质量。如果 DSN 测试成功但 Kepserver 里报错,先看 Kepserver 服务是不是还在用旧配置,改完 DSN 或设备属性后重启一次 Kepserver 服务再试。Kepserver 的 ODBC Client 对表名、列名大小写和字段类型比较敏感,MySQL 在 Linux 上表名大小写敏感、Windows 上默认不敏感,跨平台迁移时容易在这里踩坑。
5.4 四个高频排查点:现象、原因、解决
排查点一:补丁覆盖提示文件被占用。现象是复制libutil.dll、libserver.dll时弹“文件正在使用”。原因是 Kepserver 主程序退了,但后台服务还在跑,或者任务管理器里还有残留进程。解决是按第 2 章的顺序,先在任务栏退出主程序,再到任务管理器服务选项卡停止所有 KEPServerEX 服务,用Get-Service *KEPServer*复核全部 Stopped 后再覆盖。不要反复点重试,越点越容易被系统锁文件。
排查点二:32 位 ODBC 管理器里看不到 MySQL 驱动。现象是打开C:\Windows\SysWOW64\odbcad32.exe后驱动列表没有 MySQL。原因是装成了 64 位驱动,或者安装包本身是 x64。解决是卸载 64 位驱动,重新下载文件名带win32或x86的 MySQL ODBC 驱动安装包,装完再到 SysWOW64 管理器里确认。不要从 64 位管理器里“添加”一个试试,位数不对添不进去。
排查点三:Navicat 能连,Kepserver ODBC 测试失败。现象是 Navicat 测试连接成功,Kepserver 设备测试报 DSN 找不到或登录失败。原因是 DSN 建成了用户 DSN,Kepserver 服务账户看不到;或者 DSN 建在 64 位管理器里,32 位驱动读不到。解决是删掉用户 DSN,在 32 位管理器的“系统 DSN”里重建kep_mysql,填同样的账号密码,重启 Kepserver 服务后再测。这个坑我见过太多次,血泪经验就是先确认 DSN 在哪一位管理器里。
排查点四:Excel 导入后中文乱码、日期变成 0000-00-00。现象是导入成功但中文设备名变问号,日期列全是零。原因是 Excel 编码不是 UTF-8,日期列是文本格式但导入向导按默认格式解析。解决是把 Excel 另存为 CSV UTF-8,日期列统一改成yyyy-mm-dd hh:mm:ss文本再导,导入向导里显式选 UTF-8 和目标字段DATETIME。导入前先拿十行数据试,不要一次灌几万行再回头找哪一行错。
6. 装完怎么验证:从 DSN 测试到 Kepserver 读到第一条数据
装完不等于通,我一般按“数据库服务→账号查询→32 位 DSN→Kepserver 服务→Quick Client 读值→Excel 行数”六步验一遍,任何一步不过都不往下走。先看 MySQL 服务是否 Running,用专用账号执行一次查询:
-- 验证专用账号能查目标库和目标表 SELECT COUNT(*) AS cnt FROM kep_data.t_plc_data; SELECT CURRENT_USER(), DATABASE();COUNT(*)能返回数字,说明库、表、账号权限都正常;CURRENT_USER()应该是kep_user@localhost,如果变成 root,说明你连错账号了。接着打开C:\Windows\SysWOW64\odbcad32.exe,在“系统 DSN”里选中kep_mysql点“配置”-“Test”,成功后再看 Kepserver 服务:
# 验证 Kepserver 服务和 MySQL 服务都在运行 Get-Service | Where-Object { $_.Name -like "*KEPServer*" -or $_.Name -like "*MySQL*" } | Select-Object Name, Status, StartTypeStatus全是 Running 后,打开 KEPServerEX 主界面,进 OPC Quick Client,找到刚才建的 ODBC Client 设备下的 Tag,看质量戳是不是 Good、值是不是和 MySQL 表里查出来的一致。如果质量是 Bad,先回 32 位 DSN 测试,再看 Kepserver 事件日志里有没有“Data source not found”这类关键词。最后回 Navicat 查一次导入行数:
-- 和 Excel 源文件行数对照,确认导入没有漏行 SELECT COUNT(*) AS total_rows, MAX(collect_time) AS latest_time FROM kep_data.t_plc_data;total_rows和 Excel 去掉表头后的行数一致,latest_time不是零值,基本就说明这条链路跑通了。从那以后我每次装 Kepserver 连 MySQL,都先把 32 位 ODBC 管理器打开确认系统 DSN,再动 Kepserver 的 Channel,宁愿多花五分钟,也不想再为“Navicat 能连、Kepserver 连不上”返工。希望帮到你。
本文还有配套的精品资源,点击获取