Files
YwxAppThink/addon/mqttbroker/install.sql
T

147 lines
8.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- addon/mqttbroker/install.sql —— mqttbroker 插件数据表
-- 框架约定:插件安装时由 ywxapp\service\AddonService 执行本文件
-- (仅允许 CREATE TABLE / INSERT,见 importsql 白名单)。
-- 表名须为 __PREFIX__<插件名>_*,与 __PREFIX__addon 等核心表命名一致。
-- 时间字段统一约定:create_at / update_at / delete_at
-- ============================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE IF NOT EXISTS `__PREFIX__mqttbroker_connection` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`client_id` varchar(191) NOT NULL DEFAULT '' COMMENT 'MQTT客户端标识',
`username` varchar(191) DEFAULT NULL COMMENT '用户名',
`ip` varchar(64) DEFAULT NULL COMMENT '客户端IP',
`status` tinyint(1) DEFAULT '1' COMMENT '1在线 0离线',
`create_at` int DEFAULT NULL COMMENT '连接时间',
`update_at` int DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_client_id` (`client_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MQTT客户端连接表';
CREATE TABLE IF NOT EXISTS `__PREFIX__mqttbroker_message` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`client_id` varchar(191) DEFAULT NULL COMMENT '发布者client_id',
`topic` varchar(255) NOT NULL DEFAULT '' COMMENT '主题',
`payload` longtext COMMENT '消息内容',
`qos` tinyint(1) DEFAULT '0' COMMENT 'QoS等级',
`retain` tinyint(1) DEFAULT '0' COMMENT '是否保留消息',
`source` varchar(32) DEFAULT 'client' COMMENT '来源:client 客户端 / manual 后台手动',
`create_at` int DEFAULT NULL COMMENT '时间',
PRIMARY KEY (`id`),
KEY `idx_topic` (`topic`),
KEY `idx_create_at` (`create_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MQTT消息日志表';
CREATE TABLE IF NOT EXISTS `__PREFIX__mqttbroker_topic` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`client_id` varchar(191) NOT NULL DEFAULT '' COMMENT '订阅者client_id',
`topic` varchar(255) NOT NULL DEFAULT '' COMMENT '订阅主题(支持通配符)',
`qos` tinyint(1) DEFAULT '0' COMMENT 'QoS等级',
`create_at` int DEFAULT NULL COMMENT '订阅时间',
PRIMARY KEY (`id`),
KEY `idx_client_id` (`client_id`),
KEY `idx_topic` (`topic`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MQTT订阅关系表';
-- 认证账号表(allow_anonymous=0 或提供用户名时校验密码)
CREATE TABLE IF NOT EXISTS `__PREFIX__mqttbroker_auth` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(191) NOT NULL DEFAULT '' COMMENT '用户名',
`password` varchar(191) NOT NULL DEFAULT '' COMMENT '密码(bcrypt哈希,兼容明文)',
`is_superuser` tinyint(1) NOT NULL DEFAULT '0' COMMENT '超级用户跳过ACL',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1启用 0禁用',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_at` int DEFAULT NULL,
`update_at` int DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MQTT认证账号表';
-- ACL 主题权限表(按 sort 顺序匹配,命中即决定 allow/deny
CREATE TABLE IF NOT EXISTS `__PREFIX__mqttbroker_acl` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`target_type` varchar(16) NOT NULL DEFAULT 'all' COMMENT 'all/user/client',
`target` varchar(191) NOT NULL DEFAULT '' COMMENT '匹配值:用户名/clientidall时忽略',
`topic` varchar(255) NOT NULL DEFAULT '' COMMENT '主题过滤器,支持通配符与占位符%u %c',
`access` tinyint(1) NOT NULL DEFAULT '3' COMMENT '1订阅 2发布 3两者',
`allow` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1允许 0拒绝',
`sort` int NOT NULL DEFAULT '0' COMMENT '匹配优先级,越小越先',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_at` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_sort` (`sort`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MQTT ACL权限表';
-- 保留消息持久化表(重启后恢复 retained)
CREATE TABLE IF NOT EXISTS `__PREFIX__mqttbroker_retain` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`topic` varchar(255) NOT NULL DEFAULT '' COMMENT '主题',
`payload` longblob COMMENT '消息内容(二进制安全)',
`qos` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'QoS等级',
`update_at` int DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_topic` (`topic`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MQTT保留消息表';
-- 离线消息队列表(clean=false 会话离线期间的 QoS1/2 消息)
CREATE TABLE IF NOT EXISTS `__PREFIX__mqttbroker_offline` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`client_id` varchar(191) NOT NULL DEFAULT '' COMMENT '目标订阅者client_id',
`topic` varchar(255) NOT NULL DEFAULT '' COMMENT '主题',
`payload` longblob COMMENT '消息内容(二进制安全)',
`qos` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'QoS等级',
`create_at` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_client_id` (`client_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MQTT离线消息队列表';
-- 实时运行指标快照(Broker 周期写入单行 id=1,后台仪表盘轮询读取,跨进程安全)
CREATE TABLE IF NOT EXISTS `__PREFIX__mqttbroker_stats` (
`id` int unsigned NOT NULL,
`uptime` int DEFAULT '0' COMMENT '运行时长(秒)',
`clients_online` int DEFAULT '0' COMMENT '在线连接数',
`clients_total` int DEFAULT '0' COMMENT '累计会话数',
`subscriptions` int DEFAULT '0' COMMENT '订阅关系数',
`messages_received` int DEFAULT '0' COMMENT '累计接收消息数',
`messages_sent` int DEFAULT '0' COMMENT '累计发送消息数',
`retained` int DEFAULT '0' COMMENT '保留消息数',
`timestamp` int DEFAULT '0' COMMENT '快照时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MQTT实时运行指标快照';
-- 转发规则表(规则引擎:匹配源主题后转发到外部 Broker,如 EMQX
CREATE TABLE IF NOT EXISTS `__PREFIX__mqttbroker_rule` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(191) NOT NULL DEFAULT '' COMMENT '规则名称',
`source_filter` varchar(255) NOT NULL DEFAULT '' COMMENT '源主题过滤器(支持通配符 + #)',
`target_type` varchar(16) NOT NULL DEFAULT 'mqtt' COMMENT '转发目标类型:mqtt',
`target_broker` varchar(255) NOT NULL DEFAULT '' COMMENT '外部Broker地址 host:port',
`target_clientid` varchar(191) DEFAULT '' COMMENT '连接外部Broker的clientId(可选)',
`target_username` varchar(191) DEFAULT '' COMMENT '外部Broker用户名(可选)',
`target_password` varchar(191) DEFAULT '' COMMENT '外部Broker密码(可选)',
`target_topic` varchar(255) NOT NULL DEFAULT '' COMMENT '转发目标主题,支持 ${topic} 变量',
`target_qos` tinyint(1) NOT NULL DEFAULT '0' COMMENT '转发QoS',
`enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1启用 0停用',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_at` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_enabled` (`enabled`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MQTT转发规则(规则引擎)';
-- 手动发布出站队列(后台/API 发布经 DB 出栈,Broker 消费后内部路由,零外部依赖)
CREATE TABLE IF NOT EXISTS `__PREFIX__mqttbroker_outbox` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`topic` varchar(255) NOT NULL DEFAULT '' COMMENT '主题',
`payload` longblob COMMENT '消息内容(二进制安全)',
`qos` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'QoS等级',
`retain` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否保留',
`source` varchar(32) DEFAULT 'manual' COMMENT '来源: manual/api/admin',
`create_at` int DEFAULT NULL,
`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0待投递 1已投递',
PRIMARY KEY (`id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MQTT手动发布出站队列(跨进程内部路由)';