How to back up and restore InfluxDB 3 Core

Backing up InfluxDB 3 Core preserves the object-store prefix that holds the node catalog, write-ahead log, snapshots, and Parquet files. A restore matters only when a replacement instance can start from that copy and return data that existed before the backup.

InfluxDB 3 Core does not include the Enterprise backup and restore CLI, so Core operators use filesystem or provider-native object-store copies. A stopped Docker container with a host-mounted file object store keeps the backup and restore test isolated from package manager or systemd configuration.

Keep the node ID unchanged during the restore test. Current InfluxDB 3 Core catalog files live under catalog/v3, and optional paths such as dbs or snapshots may be absent on small or newly written instances, so copying the complete node prefix is safer than assuming every documented subdirectory already exists.

Steps to back up and restore InfluxDB 3 Core:

  1. Record the source node ID, host data path, backup path, restore test path, and proof database.
    Node ID: core01
    Source data path: /srv/influxdb3/source
    Backup path: /srv/influxdb3/backups/20260620-restore-test
    Restore test path: /srv/influxdb3/restore-test
    Proof database: sensors

    The source data path is the host directory mounted into the container as the file object store, not the container-only /data path.

  2. Export the admin token used for the proof query.
    $ export INFLUXDB3_AUTH_TOKEN='REPLACE_WITH_ADMIN_TOKEN'

    Do not paste real tokens into shared transcripts, screenshots, or task reports. Use the token only in the shell that runs the pre-backup and post-restore checks.

  3. Export the database name used for the proof query.
    $ export INFLUXDB3_DATABASE_NAME=sensors
  4. Query a known row before stopping the source instance.
    $ influxdb3 query --format csv "SELECT value FROM rack_temp"
    value
    21.7
  5. Stop the source container so the catalog and WAL are not changing during the copy.
    $ docker stop influxdb3-core
    influxdb3-core

    A live copy of a busy database can capture files from different points in time. Stop the writer or use a storage snapshot that freezes the mounted data path.

  6. Create the backup directory.
    $ mkdir -p /srv/influxdb3/backups/20260620-restore-test
  7. Copy the complete node prefix into the backup directory.
    $ cp -a /srv/influxdb3/source/core01 /srv/influxdb3/backups/20260620-restore-test/

    This keeps the catalog, WAL, snapshots, Parquet files, and any version-specific marker files together under the same core01 prefix.

  8. Inspect the backup contents.
    $ find /srv/influxdb3/backups/20260620-restore-test/core01 -maxdepth 3 -type f
    /srv/influxdb3/backups/20260620-restore-test/core01/catalog/v3/snapshot
    /srv/influxdb3/backups/20260620-restore-test/core01/wal/00000000001.wal

    Larger instances may also show dbs, snapshots, or provider-specific object paths. Keep every file under the node prefix.

  9. Create an empty restore test data path.
    $ mkdir -p /srv/influxdb3/restore-test

    Use a new or intentionally emptied path. Restoring over an existing object store can mix old and restored catalog or WAL files.

  10. Restore the node prefix into the test data path.
    $ cp -a /srv/influxdb3/backups/20260620-restore-test/core01 /srv/influxdb3/restore-test/
  11. Start a restore test container with the restored data path and the original node ID.
    $ docker run -d --name influxdb3-restore \
      --mount type=bind,src=/srv/influxdb3/restore-test,dst=/data \
      -p 8181:8181 \
      influxdb:3-core \
      influxdb3 serve \
      --node-id core01 \
      --object-store file \
      --data-dir /data

    If the source container uses a pinned image tag, start the restore test with the same tag before testing newer versions.
    Related: How to pin InfluxDB Docker image tags

  12. Query the restored instance.
    $ influxdb3 query --format csv "SELECT value FROM rack_temp"
    value
    21.7
  13. Remove the restore test container after the recovered data is proven.
    $ docker rm -f influxdb3-restore
    influxdb3-restore
  14. Start the original source container after the backup and restore test are complete.
    $ docker start influxdb3-core
    influxdb3-core