# 备份与恢复 (/docs/use/backup-restore)

## 手动备份

在后台后台的「备份」页面中点击「立即备份」，系统会将数据打包为 zip 文件，保存到服务器的绝对目录：

```
~/.mx-space/backup/YYYY-MM-DD_HH:mm:ss/backup-YYYY-MM-DD_HH:mm:ss.zip
```

<Callout type="info">
数据目录固定为 `~/.mx-space`（开发模式下为项目下的 `./tmp`），不随部署路径变化。目录名与文件名的时间戳格式都是 `YYYY-MM-DD_HH:mm:ss`——注意其中**包含冒号**，这是 Linux/macOS 允许、Windows 不允许的。
</Callout>

建议定期手动下载备份包到本地，以防服务器故障导致数据丢失。

## 自动备份

目前该功能仅支持备份到支持 S3 协议的云服务，暂不支持其他类型的云服务。当然，你也可以通过设置计划任务等方法达到和此功能一样的效果。

设置入口：后台「设置 → 存储 → 备份」，填入云服务所提供的对应参数即可。

## 恢复

<Callout type="warn">
该操作涉及修改数据库，请多备份几个工作日的 backup，数据无价请谨慎操作！

一般情况下回滚只会导致 analyze 数据页丢失 IP & PV 的数据。
</Callout>

服务端提供了两条现成的恢复路径，**都不需要手工重命名备份包**：

1. **上传备份包恢复** —— 在后台后台的「备份」页面中上传你手上的 zip 备份包即可，服务端会先把它落到临时目录，再直接执行恢复。
2. **按目录名回滚** —— 如果你想回到某次已有备份，直接指定该备份的目录名即可。

<Callout type="warn">
恢复操作开始前，服务端会**自动先做一次新备份**，所以回滚本身也是可逆的。回滚会导致 analyze 数据页丢失 IP 与 PV 数据，其余内容（文章、评论等）不受影响。操作前仍建议多备份几个工作日的包。
</Callout>

替换完成后会提示「数据库有变动，将在 x 秒后重载页面」，重载后请先检查文章、评论等有没有丢失。

## 命令行备份（v12+）

自 v12 起，Mix Space 使用 PostgreSQL 作为数据库。服务端自身的备份用的是 `pg_dump --format=custom`（custom 格式），你手工备份时建议保持一致：

```bash
# 备份（custom 格式，dump 落在 mx-space/pg.dump）
pg_dump -Fc postgresql://mx:mx@localhost:5432/mx_core > pg.dump
```

恢复时用 `pg_restore`，并加上服务端同样使用的清理参数：

```bash
pg_restore --clean --if-exists -d postgresql://mx:mx@localhost:5432/mx_core pg.dump
```

<Callout type="info">
`--clean --if-exists` 会在恢复前删除已存在的同名对象。如果你要的是纯 SQL 文本备份，用 `pg_dump` 不加 `-Fc`，恢复时改用 `psql < backup.sql`。
</Callout>