
Статья подготовлена вместе с экспертом
Дарья Шибкова, менеджер продукта

Сервер упал среди ночи и не поднялся. Разработчик выполнил DELETE без WHERE в боевой базе, и данные исчезли без возможности отменить операцию. Ransomware зашифровал рабочие таблицы вместе с локальным бэкапом, примонтированным на том же сервере: резервная копия исчезла одновременно с оригиналом.
Три этих сценария объединяет одно: в каждом надёжность решалась не в момент аварии, а заранее — или не решалась вовсе. Именно поэтому надёжность базы данных начинается не с железа, а с трёх решений: целевые показатели RPO (допустимый объём потери данных, измеряемый временем) и RTO (- допустимое время простоя до восстановления), продуманная стратегия бэкапа и проверенное восстановление. В статье мы разберём, как измерить фактические RPO и RTO своей системы, какие угрозы чаще всего приводят к потере данных, как построить стратегию резервного копирования с PITR и почему тестовое восстановление важнее самого факта наличия бэкапа. Материал пригодится DBA, DevOps-инженерам, CTO и техническим руководителям, которые отвечают за production-базы.

Дарья Шибкова, менеджер продукта
Именно Recovery Point Objective и Recovery Time Objective определяют архитектуру резервного копирования и репликации. RPO показывает, сколько данных компания готова потерять при аварии: если RPO равен одному часу, бэкапы должны создаваться как минимум каждый час. RTO показывает, сколько времени допустимо на восстановление сервиса: час, четыре часа или сутки.
Зафиксированные RPO и RTO нужны, чтобы оценить достаточность текущей архитектуры. Компания может исправно делать бэкапы раз в сутки и считать себя защищённой, но если бизнес не не сможет пережить потерю данных за последние 12 часов, факт наличия бэкапа ничего не гарантирует.
Требования к Recovery Point Objective и Recovery Time Objective различаются по типу системы:
| Тип системы | RPO | RTO | Типичное решение |
| Финансовые транзакции, платежи | 0 | до 1 минуты | синхронная репликация, автоматический фейловер |
| E-commerce, заказы | до 5 минут | до 30 минут | асинхронная репликация, частый PITR |
| CRM, внутренние системы | до 1 часа | до 4 часов | ежедневный бэкап, WAL-архивирование |
| Аналитика, отчёты | до 24 часов | до 24 часов | ежедневный бэкап |
| Архивные системы | дни | дни | еженедельный бэкап |
Таблица служит отправной точкой, а не готовым решением: конкретные значения зависят от бизнес-модели и стоимости простоя для каждой системы.
Большинство команд называют желаемые параметры, а не измеренные. Разница обнаруживается только в момент аварии, когда оказывается, что с последнего рабочего бэкапа прошел не час, а три дня.
Проверка требует двух действий: зафиксировать время последнего успешного бэкапа (это фактический RPO при аварии) и провести drill-тест восстановления с секундомером, получив фактический RTO. По данным datacheap.ru, компании без плана аварийного восстановления (disaster recovery, DR) закрываются в 40% случаях в течение года после серьёзного сбоя. Измерение фактических RPO и RTO: первый шаг к надёжности, которую можно проверить, а не декларировать на словах.
Диски выходят из строя, RAID-массивы деградируют при одновременном отказе двух дисков, серверы теряют питание. Это самая понятная категория угроз, и самая переоценённая.
Защита от неё — репликация на другой сервер или в другую зону доступности, а не только резервирование внутри одной машины. RAID не заменяет бэкап: он защищает от отказа одного диска, но не спасает от удаления таблицы, логической ошибки в данных или шифрования файловой системы. RAID честно продублирует и повреждённые данные.
Человеческий фактор остаётся самой частой причиной потери данных в базах: ошибка администратора или разработчика ломает данные чаще, чем сбой оборудования. «Accidentally ran DROP TABLE on production»: фраза, знакомая почти каждому DBA.
Типичные сценарии: DELETE или UPDATE без условия WHERE, DROP TABLE в production вместо тестового контура, ошибка миграции схемы, например ALTER TABLE с неверным значением DEFAULT на таблице из 100 млн строк, которая блокирует её на часы. для защиты от этого применяют три инструмента: разграничение прав доступа, проверку изменений на staging перед production и PITR, который восстанавливает базу на момент до ошибки.
Атаки ransomware в 2026 году всё чаще нацелены не только на шифрование рабочих данных, но и на подавление восстановления: злоумышленники пытаются отключить защиту, скомпрометировать backup-инфраструктуру и лишить жертву возможности быстро вернуться к работе. При этом бэкапы, доступные из той же сети или размещённые на том же сервере, остаются уязвимыми: если резервная копия не изолирована, она может быть затронута вместе с основными данными.
Защита строится на внешних бэкапах по схеме 3-2-1: три копии данных, два разных носителя, одна копия вне основной инфраструктуры. Расширенная версия схемы, 3-2-1-1-0, добавляет одну immutable-копию (защищённую от изменения и удаления) и ноль ошибок при верификации бэкапа. Immutable backup на основе Object Lock (WORM, Write Once Read Many, «записал один раз, читай много раз, изменить нельзя») защищает данные, даже если скомпрометирована учётная запись администратора: удалить или зашифровать такую копию нельзя до истечения срока хранения. Дополнительная мера: минимальные права у учётной записи, которая выполняет бэкап: доступ на запись в репозиторий бэкапов не должен давать доступ на их удаление.
Резервное копирование— это часть постоянной практики, которая определяет надёжность базы данных при любом сценарии сбоя.
Стратегия резервного копирования строится на трёх типах копий. Полный бэкап (full): снимок всей базы целиком, самый долгий и ёмкий по месту, но основа для любого восстановления. Инкрементальный бэкап сохраняет только изменения с последнего бэкапа любого типа, создаётся быстро, но восстановление требует накатить всю цепочку от последнего полного до нужной точки. Дифференциальный бэкап хранит изменения с последнего полного бэкапа: компромисс между скоростью создания и скоростью восстановления.
Рабочая схема для большинства production-баз: полный бэкап раз в неделю, ежедневные инкрементальные копии и непрерывное WAL-архивирование (Write-Ahead Log, журнал упреждающей записи) для точного восстановления на момент времени. Схема покрывает и плановое восстановление после сбоя, и точечное восстановление после ошибки в данных.
PITR позволяет восстановить базу даных на выбранный момент до возникновения инцидента, а не только до времени последней полной резервной копии. Технически PITR строится на WAL: все транзакции PostgreSQL записываются в журнал упреждающей записи до того, как применяются к данным, поэтому по журналу можно восстановить состояние базы на любую секунду между бэкапами. Восстановление проходит в два шага: разворачивается базовый снапшот, затем накатываются записи WAL до нужной точки.
Пример: разработчик в 14:37 выполнил DROP TABLE orders в production. Вместо повторения работы за сутки база восстанавливается на 14:36:59: теряются секунды транзакций вместо часов или дней. Параметр archive_timeout ограничивает потенциальную потерю данных (RPO) при постоянном архивировании WAL. Например, если выставить archive_timeout = 60, то в худшем сценарии вы потеряете данные максимум за 60 секунд, а не за часы, прошедшие с момента создания последнего полного бэкапа.
Резервная копия без проверенного восстановления не гарантирует возможность восстановления данных. На практике компании чаще всего сталкиваются с двумя сценариями: бэкапы копятся годами, но восстановление ни разу не проверялось, и в момент аварии выясняется, что копии повреждены или неполны: по данным Avast, до 60% бэкапов оказываются неполными, а 50% восстановлений завершаются неудачей. Второй тип: восстановление технически работает, но занимает 18 часов вместо ожидаемых двух.
Стоимость отсутствия регулярной проверки восстановления измеряется не только временем простоя: ручное восстановление после серьёзного инцидента без готового DRaaS-процесса (Disaster Recovery as a Service, аварийное восстановление как услуга) растягивается на дни и сотни человеко-часов инженеров, тогда как отлаженный план восстановления сокращает срок до часов. Практика для снижения риска: тестовое восстановление раз в месяц в изолированном окружении с измерением фактического RTO и фиксацией результата в runbook (пошаговой инструкции восстановления).
Чтобы минимизировать эти риски, важно автоматизировать не только резервное копирование, но и регулярную проверку восстановления. VK Cloud поддерживает такую проверку на уровне инфраструктуры: SLA (Service Level Agreement, соглашение об уровне обслуживания): 99,95% с финансовыми гарантиями, PostgreSQL версий 14–17 с PITR из коробки, для MySQL: автоматические бэкапы в Object Storage. Сервис Cloud Backup строит полные и инкрементальные копии по GFS Retention Policy (Grandfather-Father-Son, схема ротации бэкапов по дням, неделям и месяцам), поддерживает PITR для PostgreSQL и автоматически складывает копии в Object Storage. Тестовое восстановление в VK Cloud: создание нового инстанса из снапшота, который не затрагивает production; так можно измерить фактический RTO без риска для рабочей базы.
Резервные копии защищают данные от потери, но восстановление из них занимает от нескольких минут до нескольких часов - в зависимости от объёма базы данных и типа резервной копии. Репликация решает другую задачу: поддерживает копию базы данных в актуальном состоянии на другом сервере, чтобы при отказе мастера сервис продолжил работу почти без паузы. Резервные копии защищают данные от потери, но восстановление из них занимает от нескольких минут до нескольких часов - в зависимости от объёма базы данных и типа резервной копии.
Реплика получает изменения от мастера одним из двух способов. Именно этот выбор определяет RPO системы. При асинхронной репликации мастер подтверждает транзакцию клиенту сразу, не дожидаясь, пока реплика её применит. Задержка записи минимальна, производительность высокая, но при отказе мастера до момента синхронизации последние транзакции теряются безвозвратно. Это и есть replication lag, выраженный не во времени, а в потерянных данных.
При синхронной репликации мастер ждёт подтверждения хотя бы от одной реплики и только после этого отвечает клиенту. Потери данных при отказе не происходит: любая подтверждённая клиенту транзакция уже физически есть на второй копии. Компромисс заключается в увеличении задержки операций записи, потому что запрос ждёт round-trip до реплики. Для сценариев с RPO, равным нулю (платежи, финансовый учёт, биллинг), синхронная репликация обязательна, для остальных нагрузок возможен компромисс между скоростью и гарантией. В мультизональных конфигурациях синхронная репликация между дата-центрами добавляет к каждой транзакции задержку, пропорциональную сетевому round-trip между зонами: единицы миллисекунд для географически близких зон одного региона. Такой подход позволяет минимизировать риск потери данных при аварии целого ЦОД.
На практике эти режимы можно комбинировать в зависимости от требований к отказоустойчивости и производительности. В VK Cloud кластер БД по умолчанию состоит из мастера и синхронной реплики с автоматическим failover; асинхронные реплики можно добавлять дополнительно и размещать в разных дата-центрах для масштабирования чтения.
Разница между ручным и автоматическим failover измеряется в порядках: при ручном сценарии простой обычно составляет десятки минут, тогда как автоматическое переключение укладывается в десятки секунд. В ручной схеме дежурный инженер получает алерт, оценивает инцидент, промотирует реплику, обновляет строку подключения приложения и только после этого сервис возвращается в строй; даже у подготовленной команды этот процесс легко растягивается на десятки минут, потому что каждый шаг выполняет человек.
Patroni автоматически отслеживает состояние мастера и при отказе промотирует одну из реплик без участия человека; при настройках по умолчанию переключение занимает примерно 30–45 секунд, а параметр ttl можно подстраивать под требования к RTO. При этом репликация не защищает от логических ошибок: ошибочный DELETE или DROP быстро попадает на все копии, и от такого сценария помогают только бэкапы с PITR. В VK Cloud автоматический failover включён по умолчанию, поэтому не требует настройки Patroni, etcd или отдельного дежурного инженера — платформа сама следит за состоянием мастера и переключает нагрузку на реплику.
Реплика в том же дата-центре, что и мастер, защищает от отказа отдельного сервера, но не от аварии всего ЦОД: пожара, отключения питания здания, коммунального сбоя. От такого риска защищает только реплика в другой зоне доступности: физически изолированной площадке с независимым питанием и сетевым подключением.
В VK Cloud зоны доступности разнесены физически, и для критичных баз данных рекомендуется размещать мастер и синхронную реплику в разных зонах: тогда отказ одного ЦОД не останавливает сервис целиком.
Самостоятельная настройка резервного копирования, репликации и failover требует отдельного стека инструментов и постоянного внимания команды: cron-задачи для бэкапов, ручное WAL-архивирование, Patroni вместе с etcd и HAProxy для failover, Prometheus и Grafana для мониторинга. Managed DBaaS (Database as a Service, база данных как услуга) объединяет резервное копирование, репликацию и failover в одном сервисе и берёт их работу на себя по условиям SLA.
| Параметр | Self-hosted PostgreSQL | DBaaS VK Cloud |
| Автоматические бэкапы | настройка вручную: cron + pg_dump | включены по умолчанию, расписание в интерфейсе |
| PITR | ручная настройка WAL-архивирования | включён, окно хранения настраивается |
| Retention бэкапов | зависит от свободного места на диске | настраивается в интерфейсе |
| Тестирование восстановления | ручная процедура, легко пропустить | создание инстанса из снапшота в пару кликов |
| Репликация | настройка вручную: streaming replication | в несколько кликов при создании кластера |
| Автофейловер | отдельный стек: Patroni + etcd + HAProxy | встроен, работает автоматически |
| Мониторинг и алерты | Prometheus + Grafana вручную | встроенные дашборды на платформе |
| SLA | гарантий нет | 99,95% с финансовыми гарантиями |
Managed DBaaS делает надёжность измеримой: бэкапы, PITR, репликация, failover и мониторинг работают по SLA. В VK Cloud автомасштабируются только диски, а CPU, RAM и число реплик задаются вручную.
Десять пунктов, по которым можно проверить состояние базы данных за один день, без привлечения дополнительных специалистов.
1. Определены RPO и RTO: зафиксированы целевые показатели, измерены фактические
2. Автоматические бэкапы включены: расписание по требованиям RPO, retention достаточный
3. PITR настроен: WAL-архивирование активно, восстановление на нужный момент времени проверено
4. Восстановление протестировано: последний drill-тест проведён не позднее 30 дней назад, RTO измерен на практике
5. Репликация настроена: есть актуальная реплика в другой зоне доступности
6. Автофейловер работает: при отказе мастера реплика промотируется без участия дежурного инженера
7. Бэкапы хранятся offsite: копия лежит вне основного дата-центра, в другой зоне или в объектном хранилище
8. Права разграничены: у разработчиков нет прямого доступа к production с правом DROP
9. Object Lock включён: бэкапы в объектном хранилище защищены от удаления и перезаписи
10. Runbook существует: процедура восстановления задокументирована и знакома всей команде
Если хотя бы три пункта из десяти отмечены как «нет», надёжность базы данных держится на удаче, а не на архитектуре.
Надежность складывается из зафиксированных RPO и RTO, регулярных бэкапов с проверенным восстановлением, репликации с автоматическим failover и резервных копий вне основного дата-центра. главный разрыв между «бэкап настроен» и «данные действительно защищены»: это не факт наличия копии, а регулярный тест восстановления.
Managed DBaaS не убирает эту необходимость, но сильно снижает нагрузку на команду: бэкапы, PITR, репликация и failover входят в сервис и работают под SLA 99,95% с финансовыми гарантиями в VK Cloud. Поэтому чек-лист лучше пройти заранее, а не после первого аварийного восстановления.
RPO (recovery point objective), допустимый объём потерянных данных, выраженный во времени: сколько работы можно позволить себе потерять при сбое. RTO (recovery time objective), допустимое время простоя до полного восстановления сервиса. Оба показателя фиксируют до проектирования архитектуры бэкапов и репликации, а не подбирают постфактум.
PITR: восстановление базы данных на произвольный момент времени, а не только на момент снятия последнего снапшота. Механизм комбинирует полный бэкап с журналом транзакций (WAL) и применяет его до нужной секунды. PITR спасает при случайном удалении или ошибочном запросе: можно восстановить состояние за минуту до инцидента, а не откатиться на сутки назад.
Синхронная репликация ждёт подтверждения от реплики перед ответом клиенту: потерь данных при отказе мастера не происходит, но растёт задержка записи. Асинхронная репликация отвечает клиенту сразу, без подтверждения от реплики: выше производительность, но при отказе мастера последние неподтверждённые транзакции теряются.
Зависит от RPO. Если бизнес готов терять до суток данных, достаточно. Для большинства production-баз это неприемлемо: нужны более частые бэкапы или непрерывное WAL-архивирование с PITR, которое восстанавливает состояние на любую секунду между снапшотами, а не только на момент вчерашнего бэкапа.
Потому что бэкап может быть повреждён, неполным или восстанавливаться дольше, чем допускает RTO, и узнают об этом обычно в момент реального инцидента, когда исправить уже нельзя. Тест восстановления не реже раза в месяц: обязательная часть дисциплины надёжности, а не опциональная проверка.
Наши специалисты свяжутся с вами в ближайшее время и ответят на все вопросы.

Будем держать в курсе новостей и облачных трендов




