Настройка Point-in-Time Recovery (PITR) базы данных
Представьте: в 14:37 кто-то случайно удалил таблицу orders, или в 09:15 произошёл массовый неверный UPDATE на миллион строк. Без PITR восстановление — только до последнего бэкапа, и все данные после него потеряны. Мы решаем эту проблему, настраивая Point-in-Time Recovery для PostgreSQL и MySQL, чтобы вы могли откатиться на любую секунду. Стандартные бэкапы спасают от полного отказа, но не от логических ошибок. PITR даёт возможность восстановить данные с точностью до транзакции. Ключевые метрики: RPO (Recovery Point Objective) — максимальные потери данных. При archive_timeout=300 RPO ≤ 5 минут. RTO (Recovery Time Objective) — время восстановления. Для базы 100 ГБ — 15–40 минут. Без PITR восстановление может занять дни вместо часов, а потерянные данные часто невосстановимы. Согласно документации PostgreSQL, WAL-архивация является основой PITR. Экономия на одном инциденте с удалением данных может превышать $5000.
Почему PITR — не опция, а необходимость?
Без PITR вы теряете все изменения после последнего бэкапа. Это может стоить часов работы и репутации. С PITR вы восстанавливаетесь на момент до ошибки, теряя лишь несколько минут. Экономия времени при откате — в 10 раз быстрее, чем повторный ввод данных.
Какие базы данных мы поддерживаем?
- PostgreSQL — pgBackRest с репликацией в S3.
- MySQL — бинарные логи с
binlog_format=ROW.
Как работает PITR
Требует двух компонентов: базовый снапшот (полный бэкап) и непрерывный поток транзакционных логов от снапшота до текущего времени (WAL для PostgreSQL, binlog для MySQL). Восстановление = базовый снапшот + воспроизведение логов до нужного момента. Стоимость хранения WAL-архивов в S3 для базы 100 ГБ — около $15/мес.
Настройка PITR для PostgreSQL
Конфигурация WAL-архивации
В postgresql.conf:
wal_level = replica archive_mode = on archive_command = 'pgbackrest --stanza=myapp archive-push %p' archive_timeout = 300 Перезапуск PostgreSQL обязателен после изменения wal_level.
pgBackRest: полная конфигурация PITR
# /etc/pgbackrest/pgbackrest.conf [global] repo1-path=/mnt/backup-storage/pgbackrest repo1-retention-full=3 repo1-retention-archive=14 repo2-type=s3 repo2-path=/pgbackrest repo2-s3-bucket=company-db-backups repo2-s3-region=eu-west-1 repo2-retention-full=2 [myapp] pg1-path=/var/lib/postgresql/14/main pg1-port=5432 Восстановление на конкретный момент
systemctl stop postgresql pgbackrest --stanza=myapp restore \ --target="YYYY-MM-DD HH:MM:SS" \ --target-action=promote \ --delta systemctl start postgresql Замените --target на нужный момент. --delta восстанавливает только изменившиеся файлы, ускоряя процесс.
Настройка PITR для MySQL через binlog
Конфигурация бинарных логов
# /etc/mysql/mysql.conf.d/mysqld.cnf server_id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_format = ROW expire_logs_days = 14 max_binlog_size = 500M binlog_row_image = FULL Восстановление через mysqlbinlog
mysql -u root myapp < full_backup_YYYYMMDD.sql mysqlbinlog \ --stop-datetime="YYYY-MM-DD HH:MM:SS" \ /var/log/mysql/mysql-bin.000040 \ /var/log/mysql/mysql-bin.000041 \ /var/log/mysql/mysql-bin.000042 | mysql -u root myapp Пропуск проблемной транзакции: укажите --start-position и --stop-position в mysqlbinlog для исключения повреждённого события.
Как выбрать между PITR на PostgreSQL и MySQL?
| Параметр | PostgreSQL (pgBackRest) | MySQL (binlog) |
|---|---|---|
| RPO по умолчанию | 5 минут | ≤ 1 минута (без задержки) |
| RTO для 100 ГБ | 15–40 минут | 10–30 минут |
| Базовая репликация | Встроенная (streaming) | Встроенная (async/semi-sync) |
| Хранение архива | S3, локальный, NFS | Файловая система, S3 (через инструменты) |
| Восстановление по LSN | Да | Нет (только по времени/позиции) |
PostgreSQL даёт больше гибкости (восстановление по LSN, параллельное применение), но требует более тщательной настройки. MySQL проще в конфигурации, но binlog-файлы могут занимать много места при ROW формате.
Сравнение локального и S3-хранилища для архива WAL
| Параметр | Локальный диск | S3 (облачный) |
|---|---|---|
| Скорость записи | Высокая (NVMe) | Средняя (зависит от канала) |
| Надёжность | Ограничена (отказ диска) | Высокая (репликация 7*9) |
| Стоимость | Одноразовая | Ежемесячная (~$15/мес для 100 ГБ) |
| Восстановление через интернет | Только локально | Из любой точки |
| Рекомендация | Для баз < 50 ГБ | Для баз > 50 ГБ и DR |
Процесс настройки PITR в нашей компании
- Аудит текущей инфраструктуры — определяем объём базы, частоту изменений, требования к RTO/RPO.
- Конфигурация архивации — настраиваем WAL/binlog, выбираем репозиторий (локальный диск + S3).
- Тестовое восстановление — проверяем восстановление на случайный момент в изолированном окружении.
- Документирование — фиксируем процедуру, создаём runbook для дежурных инженеров.
- Обучение — проводим воркшоп для вашей команды по ручному и автоматическому восстановлению.
Типичные ошибки и как их избежать
- Пропущенный WAL-сегмент из-за неправильного
archive_command— проверяйте, что команда завершается с кодом 0. Используйтеpgbackrest --stanza=myapp check. - Слишком большой интервал
archive_timeout— увеличивает RPO. Держите не более 5 минут. - Не настроена репликация архива — используем S3 в другом регионе для disaster recovery.
- Отсутствие регулярных учений — восстановление без проверки может провалиться в критический момент.
Запланируйте хотя бы раз в квартал тестовое восстановление. Мы помогаем с этим.
Что входит в услугу
- Полная настройка PITR для PostgreSQL и/или MySQL.
- Конфигурация pgBackRest или binlog с резервированием в облако.
- Тестовое восстановление и отчёт с результатами.
- Документация по процедуре восстановления (runbook).
- Обучение ваших инженеров.
- Гарантия восстановления на любой момент времени в рамках настроенного периода.
Сроки и стоимость
Срок настройки — от 2 до 5 рабочих дней в зависимости от сложности инфраструктуры (репликация, S3, кластеризация). Стоимость рассчитывается индивидуально после аудита. Закажите настройку PITR прямо сейчас — защитите свои данные. Для консультации свяжитесь с нами: ваш персональный менеджер оценит систему за один день.
Мы имеем более 5 лет опыта в администрировании PostgreSQL и MySQL, выполнили свыше 20 проектов по PITR. Наши инженеры сертифицированы и регулярно проходят обучения. Гарантируем восстановление данных в оговорённые RTO/RPO. Свяжитесь с нами для получения консультации.
Для углублённого изучения: официальная документация PostgreSQL по WAL и MySQL Binary Log.







