MySQL 数据存储
本章节以在 CentOS 7.2 中的实际例子来说明如何通过 MySQL 来存储相关的信息。
安装与验证 MySQL 服务器
读者可以参考 MySQL 官方文档 或 Docker 来下载安装 MySQL 服务器,本文章使用 MySQL 5.6 版本。
为方便管理操作,可下载使用官方免费图形化管理软件 MySQL Workbeanch。
配置 EMQ X 服务器
通过 RPM 方式安装的 EMQ X,MySQL 相关的配置文件位于 /etc/emqx/plugins/emqx_backend_mysql.conf,如果只是测试 MySQL 持久化的功能,大部分配置不需要做更改。填入用户名、密码、数据库即可:
auth.mysql.server=127.0.0.1:3306
auth.mysql.username=root
auth.mysql.password=123456
auth.mysql.database=mqtt
保持剩下部分的配置文件不变,然后需要启动该插件。启动插件的方式有 命令行和 控制台两种方式,读者可以任选其一。
初始化数据表
插件启动时会检查配置中数据库中是否存在以下几张数据表,初始化之后才能启动插件:
mqtt_client 存储设备在线状态
DROP TABLE IF EXISTS`mqtt_client`;
CREATE TABLE`mqtt_client`(
`id`int(11)unsignedNOT NULL AUTO_INCREMENT,
`clientid`varchar(64)DEFAULT NULL,
`state`varchar(3)DEFAULT NULL,--在线状态0离线1在线
`node`varchar(100)DEFAULT NULL,--所属节点
`online_at`datetime DEFAULT NULL,--上线时间
`offline_at`datetime DEFAULT NULL,--下线时间
`created`timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(`id`),
KEY`mqtt_client_idx`(`clientid`),
UNIQUE KEY`mqtt_client_key`(`clientid`)
)ENGINE=InnoDBDEFAULT CHARSET=utf8;
mqtt_sub 存储设备的主题订阅关系
DROP TABLE IF EXISTS`mqtt_sub`;
CREATE TABLE`mqtt_sub`(
`id`int(11)unsignedNOT NULL AUTO_INCREMENT,
`clientid`varchar(64)DEFAULT NULL,
`topic`varchar(255)DEFAULT NULL,
`qos`int(3)DEFAULT NULL,
`created`timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(`id`),
KEY`mqtt_sub_idx`(`clientid`,`topic`(255),`qos`),
UNIQUE KEY`mqtt_sub_key`(`clientid`,`topic`)
)ENGINE=InnoDBDEFAULT CHARSET=utf8;
mqtt_msg 存储 MQTT 消息
DROP TABLE IF EXISTS`mqtt_msg`;
CREATE TABLE`mqtt_msg`(
`id`int(11)unsignedNOT NULL AUTO_INCREMENT,
`msgid`varchar(100)DEFAULT NULL,
`topic`varchar(1024)NOT NULL,
`sender`varchar(1024)DEFAULT NULL,
`no