# Config and data backup & restore
EMQX is highly available when clustered, and most of the data in EMQX cluster is fully replicated to all nodes -- However, we should still plan for the worst. Let's discuss data backup and restore for disaster recovery.
Mnesia (opens new window): The name of the built-in database inside each EMQX node. Data export import: A command line tool to support data export & import using a JSON file as the transient drop.
# Config files
When using morden provisioning tools for EMQX deployment, configuration changes are mostly managed by the tools, and even source controlled in for example a git repo.
In case manual config changes are made to the config files, it's a good idea to have them backed up.
The config files are possibly located in below places, but it differ depending on installation
- Default to
/etc/emqxwhen installed from RPM or DEB packages
- Default to
/opt/emqx/etcshen running in docker container
/path/to/install/dir/etcwhen directly extracted from zip package.
# Mnesia Database
There are two approaches to create a backup of the Mnesia database.
# Export 'mnesia' data
The commands introduced in Data import and export, can be used backup the database to a JSON file using the export command, and restore whth the import command.
When recovering a EMQX cluster from the exported file, the new EMQX cluster should be started with at empty state, and the import command should repopulate the database for all nodes in the cluster.
# Backup 'mnesia' dir
In EMQX Mnesia database, tables are stored in the
mnesia sub directory in EMQX's
data directory. Backing up the database can be as simple as making a copy of all the files in the
The database schema (which is also stored in
mnesia directory) is unique per EMQX node, meaning a backup can not be used to restore another node in the cluster.
Depending on installation and configuration,
data dir can be located in below possible paths.
- Where the environment variable
- Where the
node.data_dirconfig key points to in
/opt/emqx/datawhen running in docker (typically a mounted volume)
<install-path>/datawhen installed from zip package extraction
/var/lib/emqx/when installed from RPM or DEB packages
# What about Persisted Sessions ?
Prior to v5.0, EMQX nodes are rather stateless by themselves, in the sense that persistent session states are delegated to external databases (EMQX Enterprise feature).
So, for persisted sessions, there is nothing to backup from where the EMQX nodes are running.