Введение Flyway
FlywayЭто инструмент управления версиями базы данных с открытым исходным кодом, который предпочитает способ соглашения, а не конфигурацию. Flyway может управлять и отслеживать изменения базы данных независимо от приложения, поддерживает автоматическое обновление версии базы данных и имеет набор протоколов по умолчанию, которые не требуют сложной настройки Миграция может быть написана в виде сценариев SQL или в коде Java Он не только поддерживает командную строку и Java API также поддерживает инструменты сборки и Spring Boot и т. д. В то же время он может безопасно и надежно обновлять базу данных в распределенной среде, а также поддерживает восстановление после сбоя.
Использование пролетного пути
Обычно база данных проектируется глобально в начале проекта, но в процессе разработки новых функций продукта неизбежно возникают ситуации, когда необходимо обновить схему базы данных, например, добавление новых таблиц, добавление новых полей. и ограничения и т. д. Это также часто происходит в проектах. Итак, когда разработчик завершает SQL-скрипт для обновления базы данных, как его быстро синхронизировать на машинах других разработчиков? А как быстро синхронизировать на тестовом сервере? И как убедиться, что интеграционный тест может быть успешно выполнен и пройден?
Выполнение SQL-скриптов вручную на каждом тестовом сервере занимает много времени, кропотливо и трудоемко. Почему бы не автоматизировать это? Конечно, для высокоуровневых сред и сред PROD администраторам баз данных по-прежнему необходимо выполнять их вручную. Наконец, неплохо написать автоматизированную программу для автоматизации обновления, тогда, если уже есть какие-то плагины или библиотеки, которые могут помочь вам лучше реализовать такую функцию, почему бы не воспользоваться ею, конечно, если она для обучения Назначение, повторяющее колесо, понятно. На самом деле, вышеупомянутое может быть решено с помощью инструмента Flyway.Flyway может реализовать автоматическое управление версиями базы данных и может записывать записи об обновлении версии базы данных.
Команда пролетного пути
Управление версиями базы данных с помощью Flyway в основном осуществляется с помощью таблицы метаданных и 6 видов команд. Метаданные в основном используются для записи метаданных. Функция каждой команды и объем решаемой ею проблемы различны. Ниже описывается таблица метаданных и эти команды соответственно Схематическая диаграмма Все из официальной документации Flyway.
Metadata Table
Ядром Flyway является таблица метаданных, используемая для записи эволюции и статуса всех версий.Когда Flyway запускается в первый раз, по умолчанию создается таблица с именемflyway_schema_history
Таблица метаданных , ее структура таблицы (возьмем MySQL в качестве примера):
Migrate
Миграция относится к миграции схемы базы данных на последнюю версию, что является основной функцией рабочего процесса Flyway.Flyway проверит таблицу метаданных (метаданные) во время миграции.Если она не существует, она создаст таблицу метаданных.Таблица метаданных в основном используется для записи истории изменений версий и контрольной суммы и тому подобного.
Во время миграции он будет сканировать миграции в указанной файловой системе или пути к классам (что можно понимать как сценарий версии базы данных) и будет сравнивать существующие записи версий в таблице метаданных одну за другой.Если есть непримененные миграции, Flyway получит эти миграции и применит их к базе данных по порядку, иначе ничего делать не нужно. Кроме того, операция Migrate обычно должна выполняться по умолчанию при запуске приложения, что позволяет избежать несогласованности программы и базы данных.
Clean
Очистите все объекты в соответствующей схеме базы данных, включая структуры таблиц, представления, хранимые процедуры, функции и все данные. Операция очистки очень полезна на этапах разработки и тестирования, она может помочь быстро и эффективно обновить и восстановить структуру таблицы базы данных, но с особым вниманием: ее не следует использовать в производственных базах данных!
Info
Информация используется для печати подробной информации и информации о состоянии всех миграций. Фактически, это также делается с помощью таблицы метаданных и миграции. Следующий рисунок является хорошей иллюстрацией информации, напечатанной информацией. Информация может помочь быстро найти текущую версию базы данных и просмотреть успешные и неудачные миграции.
Validate
Проверка относится к проверке того, изменились ли примененные миграции. Flyway включен по умолчанию. Принцип проверки заключается в сравнении значения контрольной суммы таблицы метаданных и локальных миграций, Если значения совпадают, проверка проходит, в противном случае проверка завершается неудачно, тем самым предотвращая непреднамеренное изменение локальных миграций, которые были применены к базу данных.
Baseline
Baseline — это решение для баз данных с существующими структурами схемы, то есть для создания новой таблицы метаданных в непустой базе данных и применения миграции к базе данных. Базовый план можно применить к конкретной версии, чтобы таблицы метаданных также можно было добавлять в базы данных с существующей структурой таблиц, чтобы можно было использовать Flyway для управления новыми миграциями.
Repair
Операция восстановления может исправить таблицу метаданных, что очень полезно при наличии ошибки в таблице метаданных. Исправление исправляет ошибки в таблице метаданных, как правило, для двух целей:
- Удалите неудачные записи миграции, проблема возникает только для баз данных, которые не поддерживают транзакции DDL.
- Скорректируйте значение Checksums для Migratons, которые были применены.Например, Migratinon был применен, но был изменен локально, и ожидается, что он повторно применит и скорректирует значение Checksum, но постарайтесь этого не делать, иначе может вызвать сбои в других средах.
поддерживаемые базы данных
В настоящее время Flyway поддерживает довольно много баз данных, в том числе: Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL (включая Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL (включая Amazon RDS и Heroku), Redshift, Vertica. , H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE и Phoenix.
Приложение Flyway
Flyway может запускать соответствующие команды через командную строку и плагины (например, maven).Подробнее см.https://flywaydb.org/getstarted/firststeps/commandline
.
В этой статье речь пойдет о применении Flyway в Spring Boot.
импортировать зависимости
<!-- https://mvnrepository.com/artifact/org.flywaydb/flyway-core -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.0.7</version>
</dependency>
Настроить пролетный путь
flyway:
locations: classpath:db/migration
baseline-on-migrate: true
url: jdbc:mysql://localhost:3306/test
sql-migration-prefix: V
sql-migration-suffix: .sql
Мы указали вышеуказанные свойства в файле конфигурации. Значение свойств конфигурации Flyway следующее:
- flyway.baseline-version: версия, используемая для обозначения существующей схемы при выполнении базовой линии (по умолчанию: 1)
- flyway.enabled: включить Flyway (по умолчанию true)
- flyway.sql-migration-prefix: префикс имени файла для миграции SQL
- flyway.sql-migration-suffix : суффикс имени файла для миграции SQL
- flyway.baseline-on-migrate: следует ли автоматически вызывать базовый план при выполнении миграции с непустой схемой без таблицы метаданных.
- flyway.location: расположение скрипта миграции (по умолчанию db/migration)
Создавайте миграции правильно
Миграция относится к версии сценария, которую Flyway использует при обновлении базы данных. Например, миграция на основе SQL называется V1__init_tables.sql, а ее содержимое представляет собой оператор sql для создания всех таблиц. Кроме того, Flyway также поддерживает миграцию на основе Java. . Расположение по умолчанию, в котором Flyway загружает миграцию, — это classpath:db/migration, или вы можете указать файловую систему:/project/folder, которая автоматически и рекурсивно выполняется во время выполнения.
В дополнение к указанию местоположения, сканирование миграций Flyway также должно следовать определенному шаблону именования.Миграции в основном делятся на две категории: версии и повторяемые.
-
Versioned migrations
Обычно используется тип Versioned, который используется для обновления версий.Каждая версия имеет уникальный идентификатор и может быть применена только один раз, а уже загруженные миграции нельзя изменить, поскольку в таблице метаданных будет записано значение контрольной суммы. Версия определяет номер версии, который состоит из одного или нескольких чисел. Разделителем между числами могут быть точки или знаки подчеркивания. На самом деле знаки подчеркивания заменяются точками во время выполнения, а ведущие нули каждой части автоматически игнорируются. -
Repeatable migrations
Повторяемый относится к перезагружаемым миграциям.Каждое обновление будет влиять на значение контрольной суммы, после чего оно будет перезагружаться, а не использоваться для обновления версии. Полезно для управления обновлениями нестабильных объектов базы данных. Повторяемые миграции всегда выполняются последовательно после версии, но разработчик должен поддерживать сценарий и обеспечивать возможность его повторного выполнения.Обычно CREATE OR REPLACE используется в операторе sql для обеспечения повторяемости выполнения.
Имя файла в нем состоит из следующих частей, некоторые из которых могут настраивать правила в дополнение к использованию конфигурации по умолчанию.
- префикс: настраиваемый, идентификатор префикса, значение по умолчанию V означает Versioned, R означает Repeatable
- версия: определяет номер версии, который состоит из одного или нескольких чисел. Разделителем между числами может быть точка или символ подчеркивания_.
- разделитель: настраиваемый, используется для разделения идентификатора версии и информации описания, по умолчанию — два символа подчеркивания__
- описание: информация описания, которая может быть разделена символами подчеркивания или пробелами.
- суффикс: настраиваемый, последующий идентификатор, по умолчанию .sql
Создать файл сценария sql
Выше приведен сценарий sql, который мы создали в службе.После запуска службы вы увидите следующую информацию журнала:
Это означает, что текущий скрипт базы данных является последним, а последняя версия в таблице schema_version — 1.4.
Суммировать
Эта статья в основном знакомит с Flyway, в том числе с 6 командами, которые он предоставляет, и с тем, как использовать Flyway. Flyway может эффективно улучшить способ управления версиями базы данных.Обычно это упрощает многие ненужные громоздкие операции в локальной среде и среде разработки.Конечно, применение Flyway на производственной линии должно быть очень осторожным, что может привести к очень серьезным последствиям для онлайн данные.