# BACKUP

Служебная команда `BACKUP` используется для создания согласованной,
кластерной резервной копии данных. Команда требует привилегий
[Администратора СУБД](../../admin/access_control.md#admin) (`admin`).

## Синтаксис {: #syntax }

![BACKUP](../../images/ebnf/backup.svg)

## Параметры {: #params }

* **WAIT APPLIED** — при использовании этого параметра контроль
  пользователю будет возвращен только после того как операция создания
  резервной копии будет применена либо во всем кластере (`GLOBALLY`),
  либо в рамках текущего инстанса (`LOCALLY`).

* **TIMEOUT** — интервал времени, за который Picodata пытается выполнить
  операцию. Если времени не хватило и вернулась ошибка, то либо резервная
  копия не была создана, либо она была создана, но нам не хватило времени
  получить об этом подтверждение. Интервал по умолчанию — 1 день (86400 секунд).

## Детали работы {: #details }

Путь к директории для резервных копий задается параметром конфигурации
  `--backup-dir` (его можно указать в файле конфигурации или через
  переменную окружения). По умолчанию, резервные копии сохраняются в
  `<instance-dir>/backup`.

При выполнении `BACKUP` каждый инстанс в кластере сохраняет данные в
  поддиректории внутри `backup-dir` в файле, имя которого формируется в формате
  `YYYYMMDDThhmmss`.

В резервную копию входят:
    - файлы `.snap`, в том числе данные глобальных таблиц (включая
      конфигурацию СУБД, БД, хранимые процедуры, пользовательские объекты)
      и шардированных таблиц
    - конфигурационный файл инстанса
    - файл `.picodata-cookie`
    - данные плагинов из `share-dir`

Очистка старых резервных копий не выполняется автоматически —
  администратор БД самостоятельно управляет их удалением.

## Восстановление {: #restore }

Для восстановления из ранее созданной резервной копии используйте
CLI-команду `picodata restore`:

```shell
picodata restore --path <backup-path>
```

Рекомендуемая процедура восстановления:

* остановить все инстансы в кластере
* выполнить `picodata restore --path <backup-path>` на каждом инстансе,
  указывая одну и ту же директорию резервной копии (например,
  YYYYMMDDThhmmss)
* перезапустить все инстансы

## Ограничения и особенности {: #limitations }

<!-- * Команда `BACKUP` требует прав администратора -->
* восстановление поддерживается только в кластере с той же топологией,
  что и при создании резервной копии
* резервная копия не сохраняет файлы WAL с расширением `.xlog`

## Примеры {: #examples }

```sql
BACKUP OPTION (TIMEOUT = 3.0);
```
