
Бэкап SQLite без повреждения: .backup, VACUUM INTO и WAL
Как сделать бэкап SQLite на живой базе: почему cp опасен в WAL-режиме, .backup, VACUUM INTO, Python и Node, cron, systemd, Windows, S3 и восстановление.
SQLite
dbsend делает согласованную копию работающей SQLite-базы, сохраняет её как версию в российском облаке и позволяет восстановить любую версию с проверкой целостности. Без своего S3-бакета, скриптов ротации и ночных проверок «а бэкап вообще работает?».
SQLite хранит всю базу в одном файле, и кажется, что достаточно его скопировать. Но если в момент копирования приложение пишет в базу, вы получите файл с половиной транзакции. В режиме WAL всё ещё коварнее: свежие изменения лежат в data.db-wal, и копия одного основного файла молча теряет последние записи.
Вторая проблема — копии никто не проверяет. Скрипт в cron годами складывает файлы в бакет, пока однажды не выясняется, что последние три месяца он падал из-за истёкшего ключа, а единственная живая копия весит ноль байт.
Третья — непонятно, что внутри. Когда пользователь пишет «у меня пропали заказы», нужно быстро найти версию, в которой они ещё были. По файлам вида backup-2026-10-06.db это превращается в ручной перебор с sqlite3 в терминале.
Перед загрузкой CLI создаёт целостный снимок базы средствами самой SQLite. Приложение можно не останавливать, WAL-режим поддерживается.
Каждая загрузка — версия vN с размером, SHA-256 и меткой. Если файл не изменился, новая версия не создаётся: «Изменений нет — совпадает с v11».
Откройте две версии и увидите, в каких таблицах добавились или исчезли строки и изменилась ли схема. Удобно, чтобы найти версию «до инцидента». Доступно на тарифах от «Старт».
dbsend restore скачивает версию во временный файл, сверяет SHA-256, выполняет PRAGMA integrity_check и только потом атомарно заменяет базу, убирая устаревшие -wal, -shm и -journal.
Нужен Node.js 22.12 или новее; согласованная копия через VACUUM INTO работает без дополнительных флагов на Node.js 22.13+. API-ключ создаётся в разделе «API-ключи» — его можно ограничить одной базой. Ключ сохраняется в пользовательский конфиг, в проект попадает только .dbsend.json с ID базы.
npm install -g @dbsend/sdk
dbsend login --key sqv_pk_…
cd /srv/app
dbsend init --database <id базы> --engine sqlite
dbsend backup ./data.db
# ✓ Версия v1 сохранена (id 8c1e…, 3.4 МБ)# crontab -e — каждый час
0 * * * * cd /srv/app && /usr/local/bin/dbsend backup ./data.db >> /var/log/dbsend.log 2>&1Укажите полный путь к бинарнику (узнать: which dbsend). Если версия не изменилась, дубль не появится — запускать бэкап можно чаще. Код выхода 0 — успех, 3 — проблема с ключом, 4 — лимит тарифа, 5 — сеть.
dbsend backup ./data.db -l "до миграции 0042" && npx prisma migrate deploy
dbsend log # история версий
dbsend pin <id версии> # закрепить, чтобы ротация её не тронула
dbsend restore <id версии> ./data.db --yesВ PowerShell команды те же; путь пишется как .\data.db.
SQLite отлично работает в продакшене небольших и средних проектов: Telegram-боты, внутренние сервисы, PocketBase, Django и Rails-приложения на одном сервере, локальные приложения и прототипы, собранные с AI-ассистентом. Во всех этих случаях база — один файл на диске VPS или в Docker-volume, и потеря этого диска означает потерю всего.
dbsend не заменяет репликацию в реальном времени, а даёт простой и проверяемый слой защиты: регулярные версии вне сервера, понятную историю и восстановление, которое можно отрепетировать за минуту. Для большинства проектов на SQLite этого достаточно, чтобы спокойно делать миграции и не бояться сбоя диска или ошибочного DELETE.
| cron + sqlite3 .backup + S3 | dbsend | |
|---|---|---|
| Безопасная копия работающей базы | если не забыли .backup | VACUUM INTO автоматически |
| PRAGMA integrity_check при восстановлении | ||
| Время на настройку | скрипт, бакет, ключи, ротация — часы | 3 команды — несколько минут |
| История версий с метками | имена файлов по дате | v1…vN, метки, закрепление |
| Не плодит одинаковые копии | ||
| Diff между версиями (таблицы, строки, схема) | на платных тарифах | |
| Проверка SHA-256 при восстановлении | если написали сами | |
| Алерт, если бэкап не пришёл | Telegram и email | |
| Шифрование и хранение в РФ | зависит от бакета | AES-256-GCM, РФ |
| Доступ из Claude Code и Cursor (MCP) | ||
| Стоимость | хранилище + ваше время | от 0 ₽ |
Тарифы и лимиты — на странице «Тарифы». Документация: CLI, форматы файлов, базы.
Нет. CLI создаёт копию через VACUUM INTO — это штатный механизм SQLite, который читает базу в рамках одной транзакции. Приложение продолжает работать, а в облако уходит целостный файл.
Их не нужно копировать отдельно: VACUUM INTO включает в копию все зафиксированные транзакции из WAL. При восстановлении с флагом --yes CLI убирает устаревшие -wal и -shm рядом с целевым файлом, чтобы SQLite не применила к восстановленной базе чужой журнал.
Загружать можно в пределах суточного лимита тарифа: 5 раз в день на бесплатном, 50 на «Старт», 200 на «Про». Неизменившийся файл не создаёт новую версию, поэтому частый cron не тратит лимит версий впустую.
Litestream непрерывно реплицирует WAL в ваш бакет и требует постоянно запущенного процесса. dbsend работает по расписанию или по команде, не требует своего S3, показывает версии и diff в панели и присылает алерты, если бэкап не пришёл. Если нужна потеря не более нескольких секунд данных — выбирайте Litestream; если нужны понятные версии и проверенное восстановление — dbsend.
До 100 МБ на файл на бесплатном тарифе, 500 МБ на «Старт» и до 2 ГБ на «Про» и «Команде». Файлы больше 32 МБ CLI загружает частями автоматически.

Как сделать бэкап SQLite на живой базе: почему cp опасен в WAL-режиме, .backup, VACUUM INTO, Python и Node, cron, systemd, Windows, S3 и восстановление.

Litestream, cron-скрипт или dbsend для бэкапа SQLite: как работает каждый подход, какой RPO даёт, как восстанавливать и когда их стоит совмещать.

Бэкап базы телеграм-бота на SQLite: копия через backup API без блокировки бота, расписание, отправка админу, загрузка в S3, Docker и восстановление.

Бэкап PocketBase на практике: что лежит в pb_data, встроенные бэкапы и API, копия data.db через sqlite3, файлы в S3, восстановление и чек-лист обновления.

Как проверить, что бэкап базы рабочий: sha256sum, gzip -t, integrity_check, тестовое восстановление в Docker, еженедельный тест в cron и контроль пропусков.
Другие сценарии
Бесплатный тариф: 1 база, 500 МБ и 3 версии навсегда. Карта не нужна.
Начать бесплатно →