Как происходит обновление и миграция схемы базы данных в DevOps-практиках?

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

Ответ

В DevOps подходе миграции БД — это часть CI/CD пайплайна, а не ручная операция. Мы используем инструменты миграций (Flyway/Liquibase) и строгий процесс.

Наш рабочий процесс:

  1. Миграция как код: Разработчик создает SQL-скрипт с изменениями и называет его по соглашению (например, V20240515_01__add_user_status_column.sql). Этот файл хранится в одном репозитории с кодом приложения.
  2. Автоматизация в пайплайне: В CI/CD (например, GitLab CI) есть отдельная джоба для применения миграций. Она запускается после успешного деплоя нового кода в staging/prod среду.
    deploy_db:
      stage: deploy
      script:
        - flyway -url=$DB_JDBC_URL -user=$DB_USER -password=$DB_PASSWORD migrate
      only:
        - main
  3. Безопасность и откат:
    • Все миграции выполняются внутри транзакции, где это поддерживается СУБД (PostgreSQL).
    • Перед миграцией в prod автоматически создается снепшот БД (например, через pg_dump или инструменты облачного провайдера).
    • Для отката мы не используем flyway undo. Вместо этого мы откатываем весь деплой приложения (включая его версию кода) на предыдущий коммит, который содержит совместимую схему БД. Новую, исправляющую миграцию, добавляем отдельным скриптом.

Ключевой принцип: Схема БД и код приложения версионируются и развертываются согласованно. Невозможно иметь в продакшене код, который требует колонки, которой еще нет в базе.