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
