---
title: Backup & Restore
description: Back up and restore your 3x-ui database and certificates, manually or via the Telegram bot.
icon: DatabaseBackup
---

Your entire configuration — inbounds, clients, settings — lives in the panel's
database. Back it up regularly so you can recover or migrate.

## What to back up

- **The database** — SQLite at `/etc/x-ui/x-ui.db` by default (or your
  PostgreSQL database if you use that backend).
- **Certificates** — anything under `/root/cert/` (or wherever you store TLS
  certs).

## Manual backup

You can download a backup from the panel's overview, or copy the database file
directly from the server:

```bash title="copy the SQLite database"
cp /etc/x-ui/x-ui.db /root/x-ui-backup-$(date +%F).db
```

To restore, stop the panel, put the database back in place, and start it again.

<Callout type="warn">
  Restore a backup onto the **same major version** it came from when possible.
  Across major upgrades, let the panel run its migrations rather than forcing an
  old schema.
</Callout>

## Telegram backup

If you've configured the [Telegram bot](/docs/operations/telegram-bot), enable
**`tgBotBackup`** to attach a backup to the periodic report (on the `tgRunTime`
schedule, default daily). The bot sends both the **database** and the **Xray
`config.json`** to your admin chat, so you always have an off-server copy. Admins
can also request a backup on demand from the bot's menu.

## SQLite dump / restore

The `x-ui migrate-db` command converts the SQLite database to and from a plain
SQL text dump (handy for inspection or transferring between machines):

```bash
x-ui migrate-db --dump /root/x-ui.sql       # SQLite -> SQL text
x-ui migrate-db --restore /root/x-ui.sql     # SQL text -> SQLite
```

To move to PostgreSQL instead, see [Database](/docs/reference/database).

<Callout type="info">
  Whatever method you use, store backups **off the server** and test a restore
  occasionally — an untested backup isn't a backup.
</Callout>
