Открыть сервисСервис

Flyway — система управления миграциями баз данных

Flyway — это открытая система управления схемами баз данных (database migration tool), разработанная на языке Java. Она позволяет версионировать изменения структуры базы данных, применяя их последовательно и воспроизводимо в разных окружениях — от локальной разработки до промышленного промышленного сервера. Flyway поддерживает широкий спектр СУБД и интегрируется с популярными инструментами сборки и CI/CD-конвейерами.

История

Flyway был создан в 2011 году Михаэлем Хаузером (Michael Hausenblas) и первоначально выпускался под лицензией Apache License 2.0. Позднее проект перешёл под коммерческую лицензию компании Redgate Software, приобретшей Flyway в 2019 году. При этом сохраняется бесплатная Community-версия с базовым набором функций, а расширенные возможности (например, поддержка нескольких схем, шаблонизация, интеграция с облачными СУБД) доступны в платных редакциях Team и Enterprise.

Проект развивается как open source-компонент; исходный код доступен на GitHub, где сообщество вносит вклад в поддержку новых СУБД и исправление ошибок.

Принцип работы

Flyway отслеживает состояние базы данных с помощью служебной таблицы flyway_schema_history (ранее называлась schema_version). В эту таблицу записывается история применённых миграций: имя файла, контрольная сумма, время выполнения, статус. При запуске Flyway сравнивает список файлов миграций с содержимым таблицы и применяет только те, которые ещё не выполнялись.

Изменения описываются в SQL-скриптах (или, в случае Java-миграций, в классах на Java), которые нумеруются и выполняются в строгом порядке. Flyway поддерживает два типа миграций:

  • Версионные (versioned) — выполняются один раз, в порядке возрастания номера версии. Используются для создания и изменения таблиц, индексов, представлений.
  • Концевые (repeatable) — выполняются заново при каждом изменении их содержимого (контрольной суммы). Применяются для представлений, процедур, синхронизации справочных данных.

Поддерживаемые СУБД

Flyway работает с большинством распространённых реляционных систем управления базами данных:

СУБДПримечание
PostgreSQLПолная поддержка
MySQL / MariaDBПолная поддержка
OracleПолная поддержка
Microsoft SQL ServerПолная поддержка
IBM Db2Полная поддержка
SAP HANAПоддержка в коммерческих редакциях
Amazon AuroraЧерез совместимость с PostgreSQL/MySQL
CockroachDB, YugabyteDBПоддержка распределённых СУБД

Интеграция с инструментами сборки

Flyway предоставляет плагины для основных систем сборки:

  • Maven — плагин flyway-maven-plugin, миграции выполняются на этапе жизненного цикла проекта.
  • Gradle — плагин org.flywaydb.flyway, аналогичная интеграция.
  • Spring Boot — встроенная поддержка: Spring автоматически запускает Flyway при старте приложения, если в classpath присутствует соответствующая зависимость.
  • Docker — официальный образ flyway/flyway для запуска миграций в контейнерах.
  • Command Line Interface (CLI) — самостоятельный инструмент, работающий без Java-проекта.

Структура проекта

Типичная структура каталога миграций выглядит так:

`` src/main/resources/db/migration/ V1__create_users_table.sql V2__add_email_column.sql V3__create_orders_table.sql R__create_view_active_users.sql ``

Именование файлов подчиняется строгим правилам: версионные файлы начинаются с V и номера версии, затем два подчёркивания и описания; концевые — с R__. Номера версий могут быть целыми или дробными (например, V1.1__...), что позволяет вставлять миграции между существующими.

Применение

Flyway широко используется в практике инфраструктуры как код (Infrastructure as Code) и DevOps. Основные сценарии применения:

  • Воспроизводимость окружений — один и тот же набор миграций применяется к локальной базе разработчика, тестовому стенду и промышленному серверу.
  • Интеграция в CI/CD — миграции запускаются автоматически перед развёртыванием нового релиза приложения.
  • Аудит изменений — таблица flyway_schema_history фиксирует, какие изменения и когда были применены к базе.
  • Откат изменений — Flyway не поддерживает автоматический откат (down-миграции), поэтому рекомендуется писать миграции, безопасные для выполнения на живой базе.

Альтернативы

Существует ряд конкурирующих инструментов с похожей функциональностью:

  • Liquibase — поддерживает XML, YAML, JSON и SQL-форматы описания миграций, имеет более гибкую систему отката.
  • Alembic — инструмент для Python/SQLAlchemy.
  • Django Migrations — встроенный механизм миграций фреймворка Django.
  • Rails Migrations — аналогичный механизм в Ruby on Rails.
  • golang-migrate — популярный инструмент для Go-проектов.

Интересные факты

  • Flyway входит в состав ряда коммерческих продуктов Redgate, включая SQL Toolbelt и Flyway Desktop — графическую оболочку для управления миграциями.
  • Flyway активно используется в российских ИТ-компаниях, работающих с Java-стеком, как часть подхода DevOps и автоматизации развёртываний.
  • Проект имеет обширную документацию и активное сообщество; количество звёзд на GitHub превышает 12 тысяч.

Источники

  • Документация Flyway (flywaydb.org)
  • Redgate Software — Flyway overview
  • GitHub: flyway/flyway repository
  • Maven Central — flyway-maven-plugin
  • Spring Boot Reference Documentation — Flyway migrations
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru