How-to
Backing up Meilisearch: dumps vs snapshots, explained
Meilisearch ships two backup mechanisms: dumps (portable, version-flexible, slower) and snapshots (fast, binary, version-locked). Dumps are for migrations and disaster recovery across servers. Snapshots are for fast hot backups inside the same instance.
The 30-second answer
- Use a dump when migrating between servers, upgrading Meilisearch versions, or sharing data between environments.
- Use a snapshot when you want a fast hot backup of the current state (point-in-time recovery), restoring to the same version on the same machine.
- Run a snapshot daily and a dump weekly. Both are cheap.
Side-by-side comparison
| Property | Dump | Snapshot |
|---|---|---|
| Speed | Slow on large databases (re-serializes every document) | Fast (binary copy of the on-disk state) |
| Portability | Restorable to any Meilisearch version ≥ the producing one | Same Meilisearch version only |
| File size | Smaller (compressed JSON-ish) | Larger (full disk image) |
| Use case | Migration, version upgrades, sharing | Hot backup, disaster recovery |
| Output directory | dumps/ (configurable via --dump-dir) | snapshots/ (configurable via --snapshot-dir) |
| Trigger endpoint | POST /dumps | POST /snapshots |
| Returns | Async task envelope | Async task envelope |
Creating a dump
curl -X POST 'https://your-meilisearch/dumps' \
-H 'Authorization: Bearer YOUR_ADMIN_KEY'
Returns immediately with a task envelope:
{
"taskUid": 42,
"indexUid": null,
"status": "enqueued",
"type": "dumpCreation",
"enqueuedAt": "2026-04-11T12:00:00Z"
}
The dump file lands in the configured dumps directory (default ./data.ms/dumps/) with a name like 20260411-120000.dump. Watch the task via GET /tasks/{taskUid} until status flips to succeeded.
Restoring a dump
Restoring isn't an HTTP call — it's a Meilisearch startup flag:
meilisearch --import-dump ./dumps/20260411-120000.dump
The destination Meilisearch must be empty or you must use --ignore-dump-if-db-exists. The restore takes about as long as the original dump. Your indexes, documents, settings, and API keys are all reconstructed.
Creating a snapshot
curl -X POST 'https://your-meilisearch/snapshots' \
-H 'Authorization: Bearer YOUR_ADMIN_KEY'
Same task-envelope shape as dumps. The snapshot file lands in the snapshots directory as {timestamp}.snapshot.
Restoring a snapshot
Same shape:
meilisearch --import-snapshot ./snapshots/20260411-120000.snapshot
Snapshots are version-locked — the restore must be on the exact same Meilisearch version that produced them. Trying to restore a 1.10 snapshot on a 1.11 server will fail.
Auto-generating snapshots on a schedule
Meilisearch can generate snapshots automatically without any external scheduler. Pass a flag at startup:
meilisearch \
--schedule-snapshot 86400 \
--snapshot-dir /var/lib/meilisearch/snapshots
This snapshots once per day (86400 seconds). Older snapshots are NOT auto-deleted — you need a cron job or filesystem rotation policy to keep disk usage in check.
What's actually inside a dump?
A dump file is a tarball containing JSON for each index, the index settings, the API keys, and metadata about the Meilisearch version that produced it. You can inspect it:
tar -tvf ./dumps/20260411-120000.dump
# instances.json
# indexes/movies/documents.jsonl
# indexes/movies/settings.json
# keys.jsonl
# metadata.json
What's inside a snapshot?
A binary copy of Meilisearch's on-disk LMDB database. You can't inspect it without loading it into Meilisearch — that's why it's faster (no serialization) but version-locked (the on-disk format isn't stable across versions).
Backup strategy by team size
Solo developer / small team
- Snapshot daily (auto-scheduled via
--schedule-snapshot 86400) - Dump weekly (manually triggered or via cron)
- Copy both off-server to S3 / Backblaze / wherever you keep other backups
- Keep the last 7 days of snapshots and the last 4 weeks of dumps
Production at scale
- Snapshot every 4–6 hours
- Dump nightly
- Off-site replication via your existing backup pipeline (rsync, S3 sync, etc.)
- Test restoration monthly — a backup you've never restored is not a backup
FAQ
Can I take a snapshot while users are searching?
Yes. Snapshots are non-blocking — Meilisearch creates a consistent point-in-time copy without pausing search traffic. Same for dumps, though dumps take longer.
Can I restore a dump from Meilisearch 1.6 onto Meilisearch 1.13?
Yes — dumps are forward-compatible. Restoring an older dump on a newer version is the supported upgrade path. Restoring a newer dump on an older version is NOT supported.
Where do dumps and snapshots get stored if I don't configure a directory?
Inside the Meilisearch data directory: ./data.ms/dumps/ and ./data.ms/snapshots/. If you're running in Docker with a mounted volume, both directories live inside the volume.
Can AdminDex trigger backups?
Yes — AdminDex's instance dashboard has a "Create dump" and "Create snapshot" button that triggers the same async task and shows the result in the live task viewer. No need to remember the curl invocation.
Stop running Meilisearch from a terminal.
AdminDex gives you a visual dashboard for every Meilisearch instance you own — settings, API keys, tasks, and search analytics.
Related reading
-
How to manage Meilisearch in production without writing curl scripts
A practical guide to operating Meilisearch in production — settings management, key rotation, task monitoring, and backups — without a folder of bash scripts.
-
How to deploy Meilisearch on Docker in 5 minutes
Step-by-step Docker deployment of Meilisearch with persistent storage, the master key set as an env var, and HTTPS via a reverse proxy.
-
Scaling Meilisearch: when to shard, when to replicate, when to scale up
Meilisearch is single-node by design. Here's how to know when you've outgrown one box and what your scaling options look like at every stage.
Spotted an inaccuracy? Email the AdminDex team →