Какими командами и инструментами ты делаешь бэкап?

«Какими командами и инструментами ты делаешь бэкап?» — вопрос из категории Базы данных, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я выстраиваю бэкапы по многоуровневой стратегии, используя разные инструменты для разных целей.

1. Бэкап файловых систем и конфигураций:

  • Tar / BorgBackup: tar для простых архивов, BorgBackup — для дедуплицированных, зашифрованных и версионных бэкапов с политиками хранения.
    # Создание инкрементального снапшота с Borg
    borg create --stats /backup-repo::'{hostname}-{now}' /etc /var/www

2. Бэкап баз данных:

  • Логические дампы: Использую pg_dump для PostgreSQL и mysqldump для MySQL для создания переносимых SQL-дампов. Часто комбинирую с gzip.
    pg_dump -U postgres mydb | gzip > /backups/mydb_$(date +%Y%m%d).sql.gz
  • Физические (бинарные) бэкапы: Для больших БД PostgreSQL настраиваю непрерывную архивацию WAL (Write-Ahead Log) в сочетании с базовыми бэкапами pg_basebackup. Это позволяет выполнять восстановление на момент времени (PITR).
    pg_basebackup -D /backups/pg_base -Ft -z -P

3. Управление и автоматизация:

  • Все процессы бэкапа автоматизированы через cron или systemd timers.
  • Скрипты проверяют успешность выполнения бэкапа (через коды возврата) и отправляют уведомления в Telegram или Slack в случае сбоя.
  • Регулярно тестирую процедуру восстановления из бэкапа на изолированном стенде, чтобы убедиться в его работоспособности.

Критически важное правило: бэкапы должны храниться по принципу 3-2-1 (три копии данных, на двух разных типах носителей, одна копия — географически удаленно). Для этого использую облачные хранилища (AWS S3, Backblaze B2) с lifecycle-политиками.