EMQX V5 在重连后失去订阅的主题如何解决

使用.setAutomaticReconnect(true)自动重连,在重连后会失去之前订阅的所有主题,并且我已经使用了.setCleanStart(false)和固定的clientid。

听起来很奇怪,可以看看 emqx 完整的 debug 日志么

麻烦提供 emqx 的 debug 日志。日志 | EMQX文档


你应该是设置了 mqtt 不让订阅 qos2

image
这个没改啊

你用的 emqx 的详细版本号是多少?
1.看看这 3 个命令的输出是什么:
./bin/emqx_ctl conf show authentication

./bin/emqx_ctl conf show authorization

./bin/emqx_ctl conf show mqtt

  1. 试试订阅qos 为 0 的是否能正常订阅。

配置没问题。
应该是 bug,你升级到 5.8.5 应该就好了。

好的我试试

我想问下我没找到升级指南,有直接升级的命令吗还是要卸载后重新下

最好把 data 目录给删除掉。

我现在用了5.8.5断网后还是会丢失订阅的消息,并且无法做数据库认证
emqx.log.zip (100.7 KB)

Access denied for user 'fdrobot'@'127.0.0.1' (using password: YES)

你的 mysql 拒绝让 EMQX 连接的。

要修复这个MySQL数据库连接错误,您可以尝试以下步骤:

  1. 检查凭据
  • 确认用户名 ‘fdrobot’ 是否正确
  • 验证密码是否准确
  • 使用MySQL管理工具或命令行检查用户账户
  1. 重置或创建用户权限
-- 创建用户(如果不存在)
CREATE USER 'fdrobot'@'127.0.0.1' IDENTIFIED BY '新密码';

-- 授予必要的数据库权限
GRANT ALL PRIVILEGES ON mqtt_user.* TO 'fdrobot'@'127.0.0.1';

-- 刷新权限
FLUSH PRIVILEGES;
  1. 验证连接配置
  • 检查应用程序的数据库连接配置文件
  • 确保主机、端口、用户名和密码正确
  • 检查是否使用了正确的连接字符串
  1. 检查MySQL服务器设置
  • 确保MySQL服务正在运行
  • 检查服务器的网络和防火墙设置
  • 验证localhost和127.0.0.1的连接是否被正确配置
  1. 日志排查
  • 查看MySQL错误日志
  • 检查系统日志以获取更多详细信息

那用了5.8.5断网后还是会丢失订阅的主题这个问题有办法解决吗

建议你打开 debug 日志然后传一个完整的日志上来看看。标记说明一下是哪一条日志导致你的哪一条订阅丢弃的。我也不知道是哪里有 bug



我的程序在本机、broker在测试服务器,我尝试本机断网与broker断联后自动重连,订阅的主题就会没有。日志并没有关于该情况的记录
2025-03-27T15:28:02.692207+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:28:02.692804+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:28:17.701645+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:28:17.702177+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:28:32.711169+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:28:32.711849+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:28:47.721973+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:28:47.722574+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:29:02.733706+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:29:02.734345+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:29:17.742630+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:29:17.743212+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:29:32.752455+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:29:32.753068+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:29:47.761493+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:29:47.762189+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:30:02.771669+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:30:02.772295+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:30:17.784377+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:30:17.784972+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:30:32.794955+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:30:32.795795+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:30:47.804956+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:30:47.805763+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:31:02.815098+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:31:02.815860+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:31:17.825115+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:31:17.825735+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:31:32.834088+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:31:32.834910+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:31:47.844537+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:31:47.845094+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:32:02.852991+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:32:02.853581+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:32:17.861203+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:32:17.861708+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:32:30.917942+08:00 [warning] tag: AUTHN, clientid: serverRobot, msg: authentication_failure, peername: 192.168.11.120:58057, reason: bad_username_or_password
2025-03-27T15:32:32.872102+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:32:32.872791+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:32:47.882631+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:32:47.883263+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:33:02.891181+08:00 [warning] tag: RESOURCE, msg: start_ecpool_error, reason: {shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:33:02.891958+08:00 [warning] tag: AUTHN/MYSQL, msg: start_resource_failed, reason: {start_pool_failed,<<“emqx_authn_mysql:12”>>,{shutdown,#{cause => {1045,<<“28000”>>,<<“Access denied for user ‘fdrobot’@‘127.0.0.1’ (using password: YES)”>>},port => 3306,user => <<“fdrobot”>>,host => “127.0.0.1”,database => <<“mqtt_user”>>}}}, resource_id: <<“emqx_authn_mysql:12”>>
2025-03-27T15:33:04.128145+08:00 [warning] msg: alarm_is_deactivated, name: <<“emqx_authn_mysql:12”>>

我的程序在本机、broker在测试服务器,我尝试本机断网与broker断联后自动重连,订阅的主题就会没有。日志并没有关于该情况的记录

请提供完整的 debug 日志才能有助于分析的。
从这个上下文:我现在知道你是用的 clean start false 连接,你把session expiry interval 设置为了多少?
一般的订阅关系维护有 2 种方式。

  1. 不使用MQTT会话时,connect 时使用 clean start =true, 上线成功后自己订阅主题。重连成功后自己再次订阅主题。
  2. 使用 MQTT 会话,connect 时使用 clean start = true, session_expiry_interval=3600,这意味着如果客户端断线小于3600 秒,这断时间内的消息和订阅关系都不会丢,会在客户端重连上线时发给客户端。

所以需要在debug日志找到:第一次 connect 包使用的什么参数,重连时的 connect 又是什么参数,距离第一次 connect 的时间过去了多久。只有知道这 3 个点,就能排查出为什么订阅关系没了。
推荐你开启 emqx 的 debug 日志,耐心自己找找上面说的,应该就能找到原因的。