# 数据导入导出

EMQX Broker 为用户提供了数据导入导出功能,以满足服务器升级、迁移以及数据备份等需要。数据导入导出功能支持将当前运行的 EMQX Broker 中的黑名单、规则引擎配置等存储在 EMQX Broker 默认数据库 Mnesia 中的数据以 Json 格式导出至本地文件。当然用户无需关心导出文件中的数据内容。导出文件可以导入至其他 EMQX Broker 的运行实例,EMQX Broker 可以是相同版本,也可以是不同版本,但目前仅支持 4.1.0 及之后的版本。

EMQX Broker 为数据导入导出功能提供了命令行接口HTTP API以及 Dashboard 的可视化界面(企业版)。目前支持导入导出的数据如下:

  • 规则引擎配置数据(资源、规则)
  • 规则引擎编解码配置数据(企业版)
  • 黑名单数据
  • Application 数据
  • Dashboard 用户数据
  • 通过 emqx-auth-mnesia 插件添加的 MQTT 用户数据和 ACL 数据
  • 通过 emqx-auth-clientid 插件添加的 MQTT 用户数据和 ACL 数据
  • 通过 emqx-auth-username 插件添加的 MQTT 用户数据和 ACL 数据
  • 编解码 Schema

# 示例

# 命令行接口

  1. 导出数据,导出文件的文件名格式为 emqx-export-YYYY-MM-DD-HH-mm-SS.json,默认导出路径为 data 目录(请参见 目录结构

    $ ./emqx_ctl data export
    The emqx data has been successfully exported to /var/lib/emqx/emqx-export-2020-5-15-17-39-0.json.
    
    1
    2
  2. 保存导出文件,这里将导出文件保存到 tmp 目录

    $ cp /var/lib/emqx/emqx-export-2020-5-15-17-39-0.json /tmp
    
    1
  3. 重新安装 EMQX Broker 并启动

    $ ./emqx start
    EMQX Broker v4.1-rc.1 is started successfully!
    
    1
    2
  4. 导入数据,导入的文件名必须以绝对路径形式指定

    $ ./emqx_ctl data import /tmp/emqx-export-2020-5-15-17-39-0.json
    The emqx data has been imported successfully.
    
    1
    2
  5. 数据重载。有时由于一些版本间的兼容性问题和自定义数据处理的需求,我们允许重载被导入的数据内容。通过指定 --env 参数来指定一个 JSON 格式重载数据或兼容性指令:

    $ ./emqx_ctl data import /tmp/emqx-export-2020-5-15-17-39-0.json --env '{"auth.mnesia.as":"username"}'
    The emqx data has been imported successfully.
    
    1
    2

# HTTP API

  1. 导出数据

    $ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v4/data/export"
    
    {"data":{"size":388,"filename":"emqx-export-2020-9-4-10-24-16.json","created_at":"2020-9-4 10:24:16"},"code":0}
    
    1
    2
    3

    导出的数据文件位于 .../emqx/data/var/lib/emqx/ 目录

  2. 下载数据文件

    $ curl --basic -u admin:public -X GET http://localhost:8081/api/v4/data/file/emqx-export-2020-9-4-10-24-16.json -o /tmp/emqx-export-2020-9-4-10-24-16.json
    
    1
  3. 导入数据

    $ curl -i --basic -u admin:public -X POST "http://localhost:8081/api/v4/data/import" -d @/tmp/emqx-export-2020-9-4-10-24-16.json
    
    {"code":0}
    
    1
    2
    3

    第 2、3 步适用于在不同机器上迁移 emqx