Документация: CLI

CLI dbsend

Команды для локальной работы, cron и CI. Пакет @dbsend/sdk, бинарник dbsend, Node.js 22.12 или новее (для согласованной копии SQLite без дополнительных флагов — 22.13+). Сообщения CLI — на русском.

Установка и вход

macOS / Linux
npm install -g @dbsend/sdk
dbsend login --key sqv_pk_…
dbsend doctor
Windows PowerShell
npm install -g @dbsend/sdk
dbsend login --key sqv_pk_…
dbsend doctor

Ключ создаётся в разделе «API-ключи» и начинается с sqv_pk_. Если не указать --key, login прочитает ключ из stdin или попросит ввести его скрыто — так ключ не попадёт в историю команд. Для CI вместо login задайте переменную окружения: export DBSEND_API_KEY='sqv_pk_…' или в PowerShell $env:DBSEND_API_KEY = 'sqv_pk_…'. Переменная имеет приоритет над сохранённым ключом. Не передавайте ключ флагом в общих скриптах — он попадёт в историю команд.

Первый бэкап

cd ~/projects/app
dbsend init --database 3f2a…            # пишет .dbsend.json
dbsend backup ./data.db -l "до миграции"
# ✓ Версия v12 сохранена (id 8c1e…, 3.4 МБ)
#   https://dbsend.ru/databases/3f2a…/snapshots

dbsend backup ./data.db
# = Изменений нет — совпадает с v12

Если SHA-256 файла совпадает с последней версией, новая версия не создаётся и лимит версий не расходуется. Код выхода в этом случае — 0.

Все команды

dbsend login [--key <ключ>]

Сохранить API-ключ (флагом, из stdin или через скрытый ввод, если флаг не указан) в пользовательский конфиг (~/.config/dbsend/config.json с правами 600, в Windows — %APPDATA%\dbsend\config.json). Переменная DBSEND_API_KEY имеет приоритет.

dbsend init --database <id> [--engine sqlite]

Создать в проекте файл .dbsend.json { database, engine } — без секретов, его можно коммитить. После этого -d в backup не нужен.

dbsend backup <файл> [-d <id>] [-e <engine>] [-l <метка>] [--no-snapshot]

Загрузить файл как новую версию. SQLite предварительно копируется через VACUUM INTO (на Node.js 22.13+; на 22.12 CLI подскажет, как обновиться; --no-snapshot отключает копирование — используйте только для остановленной базы); файл сжимается потоково, считается SHA-256; файлы больше 32 МБ загружаются частями; при 429/5xx — повторы с паузой.

dbsend log [databaseId]

Короткая история версий: номер, дата, размер, метка, 📌 для закреплённых и ID.

dbsend tag <snapshotId> <метка>

Задать или изменить метку версии (до 100 символов).

dbsend pin <snapshotId> / dbsend unpin <snapshotId>

Закрепить версию — ротация и лимит версий её не удаляют — или снять закрепление.

dbsend diff <fromSnapshotId> <toSnapshotId>

Сравнить две любые версии одной базы: таблицы, строки, схема, размер (тарифы от «Старт»).

dbsend restore <snapshotId> <путь> --yes

Скачать версию во временный файл, сверить SHA-256, для SQLite выполнить PRAGMA integrity_check, убрать устаревшие -wal, -shm и -journal рядом с целевым файлом и атомарно заменить его. Без --yes команда ничего не перезаписывает.

dbsend databases [--json]

Список баз и их ID.

dbsend snapshots <databaseId> [--json]

Подробный список версий базы.

dbsend doctor

Проверить ключ, соединение с API и доступ к рабочему пространству.

dbsend cms <ghost|strapi|directus> [-p <путь>]

Бэкап SQLite-хранилища популярных CMS с автоопределением пути.

dbsend mssql --sql-database <имя> [-d <id>] [--server <host[\instance][,port]>] [--user <логин>] [--backup-dir <каталог>] [--no-compression] [--keep-local] [--sqlcmd <путь>] [--trust-server-certificate] [-l <метка>] [--json]

CLI 0.4.0+. Нативный бэкап Microsoft SQL Server через sqlcmd: BACKUP DATABASE … WITH COPY_ONLY, CHECKSUM, INIT, COMPRESSION (в Express — автоматически без сжатия), затем RESTORE VERIFYONLY WITH CHECKSUM и загрузка как mssql_backup. Без --user — вход Windows; пароль SQL-логина — только в SQLCMDPASSWORD. Локальный .bak удаляется, если не указан --keep-local.

dbsend 1c (--file <каталог базы или 1Cv8.1CD> | --server <сервер> --ib <имя базы>) [-d <id>] [--user <пользователь 1С>] [--bin <путь к 1cv8>] [--out-dir <каталог>] [--keep-local] [-l <метка>] [--json]

CLI 0.4.0+, бета. Выгрузка информационной базы 1С в .dt конфигуратором в пакетном режиме (/DumpIB) и загрузка как onec_dt; при ошибке показывает конец журнала /Out. Пароль пользователя 1С — в ONEC_PASSWORD (передаётся конфигуратору как /P — используйте отдельного пользователя для бэкапа). Нужен монопольный режим: пользователи должны выйти из базы.

Общие опции: --key, --url, --json (машиночитаемый вывод для всех команд). Engine: sqlite, duckdb, postgresql_dump, mysql_dump, mssql_backup, onec_dt, generic_file — см. форматы файлов.

MS SQL Server: dbsend mssql

Доступно в CLI 0.4.0+. Запускайте на машине с SQL Server (или там, где каталог бэкапов доступен службе SQL Server); нужна утилита sqlcmd — winget install sqlcmd в Windows или пакет mssql-tools18 в Linux (CLI сам проверяет /opt/mssql-tools18/bin; другой путь — --sqlcmd). Если sqlcmd не найден или параметры неверны, команда завершится с кодом 2 и подскажет, как установить sqlcmd.

# вход Windows (текущий пользователь)
dbsend mssql --sql-database Shop -d 5b7c… --backup-dir D:\Backup
# ✓ Версия v18 сохранена (id 4d2a…, 412 МБ)

# SQL-логин и именованный экземпляр; пароль — только из переменной окружения
$env:SQLCMDPASSWORD = '…'
dbsend mssql --sql-database Shop -d 5b7c… --server "srv-sql\SQLEXPRESS" --user backup_operator

# готовый .bak из ваших скриптов
dbsend backup D:\Backup\Shop.bak -d 5b7c… --engine mssql_backup
  • BACKUP DATABASE [имя] TO DISK = N'…\имя-время.bak' WITH COPY_ONLY, CHECKSUM, INIT, COMPRESSION — COPY_ONLY не влияет на вашу цепочку разностных бэкапов и бэкапов журнала.
  • Если сервер не поддерживает сжатие (SQL Server Express, ошибка 1844), бэкап повторяется без COMPRESSION, CLI выводит пояснение. --no-compression отключает сжатие сразу.
  • RESTORE VERIFYONLY … WITH CHECKSUM перед загрузкой; если проверка не прошла — код выхода 6, файл не загружается.
  • --backup-dir — каталог для .bak (по умолчанию временный каталог ОС), должен быть доступен на запись учётной записи службы SQL Server. После успешной загрузки файл удаляется, если не указан --keep-local; при ошибке .bak остаётся на диске, а CLI печатает путь к нему.
  • Пароль SQL-логина передаётся только через SQLCMDPASSWORD — sqlcmd читает переменную сам, в аргументах процесса пароля нет.
  • Как и у других команд, доступны --json (машиночитаемый результат), -k/--key и --url.
  • --server — host[\instance][,port], по умолчанию localhost. --trust-server-certificate — для самоподписанного сертификата (mssql-tools18 шифрует соединение по умолчанию).

1С: dbsend 1c бета

Доступно в CLI 0.4.0+. Запускает конфигуратор 1С в пакетном режиме и выгружает информационную базу в .dt, проверяет код выхода и то, что файл создан и не пустой, затем загружает его как onec_dt. При ошибке показывает конец журнала конфигуратора. Платформа ищется автоматически (последняя версия в C:\Program Files\1cv8\*\bin, C:\Program Files (x86)\1cv8, /opt/1cv8); другой путь — --bin. --file принимает каталог файловой базы или путь к самому 1Cv8.1CD. Поддерживается --json.

Пароль из ONEC_PASSWORD конфигуратор получает параметром /P, поэтому во время выгрузки он виден в списке процессов на этом компьютере. Заведите для бэкапа отдельного пользователя 1С и не используйте пароль администратора, которым пользуются люди.

$env:ONEC_PASSWORD = '…'
dbsend 1c --file "D:\1C\Buh" -d 2c9e… --user "Администратор"
dbsend 1c --server srv1c --ib buh -d 2c9e… --user "Администратор"

# под капотом:
# 1cv8 DESIGNER /F "D:\1C\Buh" /N "Администратор" /P … /DisableStartupDialogs /DisableStartupMessages /DumpIB "<out>.dt" /Out "<log>"

# копия файловой базы — только когда к ней никто не подключён
dbsend backup "D:\1C\Buh\1Cv8.1CD" -d 2c9e… --engine onec_dt

Выгрузка .dt требует монопольного режима: в базе не должно быть открытых сеансов. Планируйте её на ночь; если команда сообщает, что базу не удалось заблокировать, завершите сеансы пользователей (в клиент-серверном варианте — через консоль кластера) и повторите. Восстановление: dbsend restore <id> ./Buh.dt --yes, затем «Загрузить информационную базу» в конфигураторе или /RestoreIB. Подробнее — бэкап базы 1С и бэкап MS SQL Server.

История и восстановление

dbsend log
# v12  2026-10-06 14:03  3.4 МБ  до миграции  📌  8c1e…
# v11  2026-10-06 03:00  3.4 МБ                   71b0…

dbsend tag 71b0… "ночной"
dbsend pin 8c1e…
dbsend diff 71b0… 8c1e…
dbsend restore 8c1e… ./data.db --yes

Перед заменой рабочей базы восстановите версию в отдельный путь и проверьте данные. Для дампов PostgreSQL/MySQL restore возвращает исходный .sql — примените его штатным psql или mysql.

Автоматизация

cron (Linux)
# каждый час; полный путь к бинарнику: which dbsend
0 * * * * cd /srv/app && /usr/local/bin/dbsend backup ./data.db >> /var/log/dbsend.log 2>&1

# PostgreSQL: только plain SQL dump
pg_dump --format=plain "$DATABASE_URL" > /var/backups/app.sql
dbsend backup /var/backups/app.sql -d "$DBSEND_DATABASE_ID" -e postgresql_dump -l "nightly-$(date +%F)"
Планировщик заданий Windows (PowerShell)
$action  = New-ScheduledTaskAction -Execute "dbsend" -Argument "backup C:\app\data.db" -WorkingDirectory "C:\app"
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
Register-ScheduledTask -TaskName "dbsend-backup" -Action $action -Trigger $trigger

Коды выхода

КодЗначение
0Успех (в том числе «Изменений нет»)
1Общая ошибка
2Неверные аргументы команды
3Ошибка авторизации: нет ключа, ключ неверный, отозван или истёк
4Лимит тарифа или квота исчерпаны
5Сетевая ошибка или API недоступен после повторов
6Проверка целостности не пройдена (SHA-256, integrity_check или RESTORE VERIFYONLY)

Частые ошибки

  • «Нужен API-ключ» — выполните dbsend login --key … или задайте DBSEND_API_KEY.
  • Код 3 (401/403) — ключ отозван, истёк, не имеет нужного права или привязан к другой базе.
  • Код 4 — исчерпан лимит хранилища, версий или загрузок в день; см. тарифы.
  • Код 5 — проверьте сеть; CLI уже повторил запрос с паузой. Не запускайте параллельные cron для одного файла.
  • Файл не найден — используйте абсолютный путь и проверьте права чтения.
  • Diff ещё готовится — повторите команду через несколько секунд.

Готовы попробовать?

Бесплатный тариф: 1 база, 500 МБ и 3 версии — без карты.