You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04下执行mqtt2sql脚本遇MySQL ERROR 1064如何排查?

问题诊断与解决

核心问题

你遇到的语法错误根源是MySQL版本兼容性问题:CREATE VIEW IF NOT EXISTS 语法是MySQL 8.0才正式引入的特性,若你当前使用的是MySQL 5.7或更低版本,就会触发这个1064语法错误。

排查步骤

  1. 先确认本地MySQL版本,执行命令:
    mysql --version
    
    若输出为5.7.x或更低版本,即可确认是版本兼容导致的问题。
  2. 单独复制脚本第94行开始的视图创建语句,直接在MySQL命令行执行,会得到相同错误,进一步验证问题点。

解决方法

方法1:修改SQL脚本(兼容低版本MySQL)

将脚本中第94行开始的视图创建代码:

CREATE VIEW IF NOT EXISTS `mqtt_history_view` AS
SELECT
    h.id,
    h.ts AS 'ts',
    m.ts AS 'mqtt_ts',
    h.topic_id,
    t.topic,
    h.payload,
    h.qos,
    h.retain
FROM mqtt_history h
JOIN mqtt_topic t on h.topic_id = t.id
LEFT JOIN mqtt_message m on h.msg_id = m.id;

替换为:

DROP VIEW IF EXISTS `mqtt_history_view`;
CREATE VIEW `mqtt_history_view` AS
SELECT
    h.id,
    h.ts AS 'ts',
    m.ts AS 'mqtt_ts',
    h.topic_id,
    t.topic,
    h.payload,
    h.qos,
    h.retain
FROM mqtt_history h
JOIN mqtt_topic t on h.topic_id = t.id
LEFT JOIN mqtt_message m on h.msg_id = m.id;

原理是先删除已存在的视图(如果有),再重新创建,这是低版本MySQL支持的标准写法。

方法2:升级MySQL到8.0+

若环境允许,直接将MySQL升级到8.0或更高版本,之后无需修改脚本即可正常执行。

内容的提问来源于stack exchange,提问作者gatorback

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:52:22