ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Kepserver 连接 MySQL 实战:ODBC 驱动配置与数据落地避坑指南

Kepserver 连接 MySQL 实战:ODBC 驱动配置与数据落地避坑指南

简介:这份PDF资料面向工业自动化与数据采集方向的工程师及运维人员,聚焦Kepserver与MySQL数据库的对接场景,解决设备数据落库与可视化管理的实际问题。内容涵盖MySQL数据库安装、Navicat可视化管理工具的安装与破解、32位ODBC驱动配置,以及Kepserver连接MySQL的完整操作流程,并附带Excel数据导入数据库的实践环节。资源包共1个PDF文件,大小约3.89MB,以图文步骤形式呈现,便于按章节对照操作。目前已有2628人学习下载,适合需要快速搭建Kepserver与MySQL数据通道、排查驱动位数与连接配置问题的读者参考,也可作为现场部署时的操作手册使用。

1. 从一台工控机到数据库:Kepserver 连 MySQL 到底卡在哪

很多做数据采集的同行都遇到过这种局面:现场设备跑得好好的,Kepserver 里标签值也在跳,但要把这些数据落到 MySQL 里做报表、做追溯,就发现中间隔着一道看不见的墙。Kepserver 本身不直接往 MySQL 写数据,它走的是 ODBC 通道,而 ODBC 又分 32 位和 64 位,装错了连驱动都认不到。更麻烦的是,网上能找到的教程要么只讲安装不讲配置,要么把破解步骤写得含糊其辞,照着做十有八九卡在“数据源找不到”或者“连接测试失败”上。这篇笔记就把 Kepserver 连接 MySQL 这条链路拆开,从软件安装、ODBC 驱动选型、数据源配置到 Excel 导入数据,每一步都落到可复现的操作上。适合手里有 Kepserver 授权、需要把设备数据写进关系库的自动化工程师,也适合刚接触工控数据落地的后端开发。

2. 环境搭建:Kepserver 与 MySQL 的安装顺序和版本匹配

2.1 为什么先装 Kepserver 再装 MySQL

安装顺序不是随便定的。Kepserver 在安装时会注册自己的 ODBC 相关组件,如果先装 MySQL 的 ODBC 驱动,再装 Kepserver,某些版本下 Kepserver 的安装程序会覆盖掉系统里已有的 ODBC 配置项,导致后面建数据源时列表里看不到 MySQL 驱动。我一般会按这个顺序走:先装 Kepserver,再装 MySQL 数据库,接着装 Navicat 管理工具,最后装 ODBC 驱动。这样每一步的依赖都是往下走的,不会出现组件互相覆盖的情况。

Kepserver 安装本身不复杂,以管理员身份运行安装包,选“典型”安装,把示例和文档都勾上。安装完成后先别急着打开,右键任务栏图标退出程序,再到任务管理器的服务选项卡里把所有带 KEPServerEX 字样的服务逐个停止。这一步是为了后面替换文件时不被占用。替换的两个文件是 libutil.dll 和 libserver.dll,直接覆盖到安装目录下。如果提示文件被占用,说明还有服务没停干净,回去检查一遍。

MySQL 安装时选“Custom”模式,把 MySQL Server 和 MySQL Workbench 都加到右边。设置 root 密码那一步建议用纯数字加字母的组合,别带特殊符号,不然后面 ODBC 配置时容易出玄学问题。安装完成后,MySQL 服务默认是自启动的,可以在服务里确认一下状态。

2.2 Navicat 的安装与激活注意事项

Navicat 是用来管理 MySQL 的图形化工具,安装本身一路下一步就行。激活过程需要断网操作,打开激活工具后先点 Patch,再点 Generate 生成密钥,把密钥复制到 Navicat 的注册窗口里。选择手动激活后,会得到一个请求码,把请求码粘贴回激活工具生成激活码,再填回 Navicat 完成激活。整个过程里最容易翻车的地方是断网不彻底,如果系统还连着 WiFi 或者有线网,激活工具生成的码可能对不上。我一般会把网络适配器先禁用,激活完成后再启用。

注意:激活工具和补丁文件只用于学习环境,商业项目请使用正版授权。

2.3 ODBC 驱动的位数选择:32 位是硬性要求

这是整条链路里最关键的一步。Kepserver 是 32 位应用程序,它只能调用 32 位的 ODBC 驱动。如果你装了 64 位的 MySQL ODBC 驱动,在 Kepserver 里建数据源时,驱动列表里根本不会出现 MySQL 的选项。很多人在这里卡住,以为是 Kepserver 版本问题,其实是驱动位数不对。

判断方法很简单:打开“ODBC 数据源管理器”,注意看标题栏。如果是 64 位的管理器,标题里会带“64-bit”字样。Kepserver 需要的是不带 64-bit 的那个,也就是 32 位版本。在 32 位管理器里,切换到“系统 DSN”选项卡,点“添加”,如果列表里有 MySQL ODBC 8.0 Unicode Driver 之类的条目,说明驱动装对了。如果没有,就去 MySQL 官网下载 32 位的 ODBC 驱动重新安装。

安装 32 位驱动时,安装程序可能会提示已存在更新版本,这时候需要先把 64 位驱动卸载,再装 32 位。卸载后重启一次系统,确保注册表里的 ODBC 配置被清理干净。

3. 配置 Kepserver 的 ODBC 通道:从数据源到标签映射

3.1 在 32 位 ODBC 管理器里建系统 DSN

打开 32 位 ODBC 数据源管理器,切换到“系统 DSN”选项卡,点“添加”。在弹出的驱动列表里选 MySQL ODBC 驱动,然后填写连接参数。这里有几个参数需要特别注意:

参数项填写内容说明
Data Source NameKepMySQL自定义名称,后面 Kepserver 里要选这个
TCP/IP Server127.0.0.1本机数据库就填回环地址
Port3306MySQL 默认端口
Userroot数据库管理员账号
Password安装时设置的密码区分大小写
Database留空或选目标库可以先不选,后面在 SQL 里指定

填完后点“Test”按钮,如果提示 Connection Successful,说明 DSN 建好了。如果报错,常见原因是 MySQL 服务没启动、密码错误、或者端口被防火墙拦了。先在命令行里用mysql -u root -p试一下能不能登录,能登录再回来测 DSN。

3.2 Kepserver 里新建 ODBC 通道和设备

打开 Kepserver 配置界面,右键“Connectivity”选“New Channel”。通道类型选“ODBC Client”,给通道起个名字,比如“MySQLChannel”。下一步会问你要不要优化,保持默认就行。接着新建设备,设备类型选“ODBC Client”,然后会弹出数据源选择窗口。

这里就是前面建 DSN 的用处了。在数据源列表里选中“KepMySQL”,如果列表是空的,说明 32 位 DSN 没建成功,或者 Kepserver 没有以管理员权限运行。选中后点下一步,Kepserver 会尝试连接数据库,连接成功的话会显示数据库里的表列表。

3.3 用 SQL 查询绑定标签

Kepserver 的 ODBC 通道不是简单地把标签值写进表里,而是通过 SQL 语句来定义读写行为。在设备下新建标签时,需要填写 SQL 语句。比如要往一张叫device_data的表里写数据,表结构是id、tag_name、tag_value、create_time,那么写入标签的 SQL 可以这样写:

INSERT INTO device_data (tag_name, tag_value, create_time) VALUES ('temp_01', ?, NOW())

这里的问号是参数占位符,Kepserver 会把标签的当前值填进去。tag_name是固定字符串,create_time用 MySQL 的NOW()函数自动生成。如果要做读取标签,SQL 就写成:

SELECT tag_value FROM device_data WHERE tag_name = 'temp_01' ORDER BY create_time DESC LIMIT 1

这条语句会取最近一次写入的值作为标签的当前值。在 Kepserver 的标签属性里,把“Data Type”设成对应的类型,比如 Float 或 String,然后点“Validate”验证 SQL 语法。验证通过后,标签就能正常读写了。

提示:Kepserver 的 ODBC 通道对 SQL 语法有要求,不支持复杂的子查询和存储过程调用。尽量用简单的 INSERT 和 SELECT。

3.4 测试数据写入与常见报错

配置完成后,在 Kepserver 的 Quick Client 里找到刚才建的标签,手动改一下值,然后去 Navicat 里刷新device_data表,看有没有新记录。如果没有,先看 Kepserver 的 Event Log,里面会记录 ODBC 错误码。常见的错误有:

  • [MySQL][ODBC 8.0 Driver]Access denied for user:账号密码不对,或者 root 用户没有远程访问权限。本机连接的话,检查 MySQL 的 user 表里 root 对应的 host 是不是 localhost。
  • [MySQL][ODBC 8.0 Driver]Table doesn't exist:SQL 里的表名写错了,或者 DSN 里选的数据库不对。
  • [ODBC Client]Failed to execute SQL:SQL 语法有问题,把语句复制到 Navicat 里直接执行一遍,看报什么错。

4. 避坑排查:Kepserver 连 MySQL 最常见的五个翻车点

4.1 现象:ODBC 管理器里找不到 MySQL 驱动

原因:装的是 64 位驱动,而 Kepserver 需要 32 位。或者驱动装了但没注册到系统 DSN 里。

解决:打开 32 位 ODBC 管理器(路径通常是C:\Windows\SysWOW64\odbcad32.exe),确认“系统 DSN”里能看到 MySQL 驱动。如果看不到,重新安装 32 位驱动,安装时右键以管理员身份运行。

4.2 现象:Kepserver 连接测试通过,但写入数据时报“连接已关闭”

原因:MySQL 的wait_timeout参数默认是 8 小时,连接空闲超过这个时间会被服务端断开。Kepserver 的 ODBC 连接池没有自动重连机制。

解决:在 MySQL 配置文件里把wait_timeout和interactive_timeout调大,比如设成 86400 秒。或者在建 DSN 时勾选“Auto Reconnect”选项。更稳妥的做法是在 Kepserver 的通道属性里把“Reconnect Delay”设成 10 秒,断开后自动重连。

4.3 现象:写入的中文变成问号

原因:ODBC 连接的字符集不对。MySQL 默认字符集是utf8mb4,但 ODBC 驱动可能用了latin1。

解决:在 DSN 配置页面点“Details”按钮,找到“Character Set”选项,填utf8mb4。如果驱动版本较老没有这个选项,就在 SQL 语句里加SET NAMES utf8mb4,不过 Kepserver 不支持多语句执行,所以还是改 DSN 更靠谱。

4.4 现象:Kepserver 服务启动后 ODBC 通道显示红色叉号

原因:Kepserver 服务运行在系统账户下,而系统 DSN 是给当前用户建的。服务账户读不到用户 DSN。

解决:必须建“系统 DSN”而不是“用户 DSN”。在 32 位 ODBC 管理器的“系统 DSN”选项卡里重新建一个,名字和 Kepserver 里选的一致。

4.5 现象:Excel 导入数据后,Kepserver 读不到新记录

原因:Excel 导入时如果用了 Navicat 的导入向导,默认可能把数据写到了临时表或者字符集不匹配导致主键冲突。

解决:导入前先在 Navicat 里建好目标表,字段类型和 Excel 列对应好。导入时选“追加”模式,不要选“复制”。导入完成后在 Navicat 里执行SELECT COUNT(*)确认数据行数。如果 Kepserver 的 SELECT 语句带了ORDER BY create_time DESC LIMIT 1,确保create_time字段有索引,不然数据量大了查询会超时。

5. 用 Excel 批量导入历史数据并验证 Kepserver 读取

Excel 导入数据到 MySQL 这一步,很多人用 Navicat 的导入向导,但向导里有个细节容易忽略:字段映射。打开 Navicat,右键目标表选“导入向导”,文件类型选 Excel,然后选中你的 xlsx 文件。下一步会显示 Excel 的列名,需要手动把它们拖到右边的目标字段上。如果列名和字段名完全一致,可以点“自动映射”,但建议还是人工核对一遍,特别是日期时间字段,Excel 里的格式和 MySQL 的datetime格式经常对不上。

导入模式选“追加”,不要选“更新”或“复制”。追加是把新行插进去,更新是根据主键覆盖,复制是建新表。选错了要么数据重复,要么把原表结构改了。导入完成后,在 Navicat 里执行一条查询:

SELECT COUNT(*) AS total, MIN(create_time) AS first_time, MAX(create_time) AS last_time FROM device_data;

这条语句能告诉你一共导入了多少行,时间范围是什么。如果total是 0,说明导入失败,回去检查 Excel 文件是不是被其他程序占用了,或者 Navicat 的导入日志里有没有报错。

验证 Kepserver 能不能读到这些历史数据,在 Quick Client 里找到对应的读取标签,看它的值是不是变成了最新导入的那条记录。如果值没变,检查 SELECT 语句里的ORDER BY字段是不是create_time,以及LIMIT是不是 1。有时候导入的数据里create_time有重复值,ORDER BY加LIMIT 1取到的可能不是你以为的那条。我一般会在表里加一个自增主键id,然后用ORDER BY id DESC LIMIT 1来取最新记录,这样更稳。

从那以后我每次配完 ODBC 通道,都会先在 Navicat 里手动插一条测试数据,再用 Kepserver 的 Quick Client 读一次,确认读写都通了才去接真实设备。这个习惯帮我省了很多在现场排查“到底是 Kepserver 问题还是数据库问题”的时间。希望帮到你。

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进