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

MySQL Spring

Оригинальный адрес:Блог Лян Гуйчжао

адрес блога:blog.720ui.com

Добро пожаловать на официальный аккаунт: «Серверное мышление». Группа людей с одинаковой частотой растет вместе, вместе совершенствуется и преодолевает ограничения познания.

Сегодня я рассмотрю интересную тему: мы можем реализовать контроль версий проекта через Git; непрерывную интеграцию через Jenkins, затем для уровня базы данных мы по-прежнему полагаемся на чисто ручной запуск SQL-скриптов, для которых мы работаем в нескольких средах (среда разработки , Как обеспечить актуальность и правильность своих SQL-скриптов в тестовой среде, промежуточной среде, производственной среде)?

image.png

Как мы все знаем, ручные операции очень подвержены проблемам, и мы должны позволить программе помочь автоматизировать управление и миграцию. Сегодня я рекомендую Flyway, инструмент миграции базы данных с открытым исходным кодом.

image.png

Flyway поддерживает не только MySQL, но и многие другие базы данных.

image.png

На самом деле Spring Boot прекрасно интегрировал Flyway. Для этого мы можем использовать его очень удобно. Во-первых, мы вводим зависимости Maven. (Обратите внимание, что нам также нужны зависимости spring-boot-starter-jdbc, mysql-connector-java в нашем проекте)

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>

Кроме того, мы настраиваем соответствующие параметры в application.yml. Spring Boot по умолчанию сканирует миграции в каталоге classpath://db/migration. Здесь автор настраивает его на db/sql через spring.flyway.locations.

spring:
  flyway:
    enabled: true
    baseline-on-migrate: true
    locations: [classpath:db/sql]

Когда системная программа запускается, она автоматически создает файл flyway_schema_history. (Конечно, вы также можете создать его вручную самостоятельно). Эта таблица представляет собой таблицу метаданных Flyway, в которой хранятся записи о каждой миграции, включая номер версии сценария миграции и значение контрольной суммы сценария SQL. При сканировании нового SQL-скрипта Flyway анализирует номер версии SQL-скрипта и сравнивает его с таблицей метаданных.Если версия SQL-скрипта обновляется, SQL-файл будет выполняться на указанной БД, в противном случае SQL быть пропущен документ.

CREATE TABLE `flyway_schema_history` (
  `installed_rank` int(11) NOT NULL,
  `version` varchar(50) DEFAULT NULL,
  `description` varchar(200) NOT NULL,
  `type` varchar(20) NOT NULL,
  `script` varchar(1000) NOT NULL,
  `checksum` int(11) DEFAULT NULL,
  `installed_by` varchar(100) NOT NULL,
  `installed_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `execution_time` int(11) NOT NULL,
  `success` tinyint(1) NOT NULL,
  PRIMARY KEY (`installed_rank`),
  KEY `flyway_schema_history_s_idx` (`success`)
)

Затем мы вручную создаем SQL-скрипт инициализации в db/sql: V1.1__INIT_DB.sql.

DROP TABLE IF EXISTS `tag`;

CREATE TABLE `tag` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `gmtCreate` date DEFAULT NULL,
  `gmtModified` date DEFAULT NULL,
  `title` varchar(32) DEFAULT NULL,
  `parentId` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Ну а после того, как программа снова запустится, она автоматически опубликует его в базе данных.

image.png

Здесь дополнительные знания: Правила сравнения версий Flyway. Он использует принцип выравнивания по левому краю и заменяет отсутствующую позицию на 0. Например, 1.1 выше 1.0, 1.1.1 выше 1.1, а 1.1.01 и 1.1.1 совпадают. Кроме того, они отсортированы по версии и выполняются последовательно.

image.png

Кроме того, Flyway поддерживает не только DDL, но и DML (вставка, обновление, удаление) и т.д. Поэтому мы можем создать еще один файл V1.2__INSERT_TAG_DATA.sql для проверки.

INSERT tag(title, parentId) values('java', 0);
INSERT tag(title, parentId) values('spring', 0);

Наконец, давайте обсудим распространенные типы миграции, которые поддерживает Flyway:

  • Версионные миграции: скрипты обновления базы данных
  • Повторяемые миграции: повторяемые, повторно выполняемые при изменении контрольных сумм сценария.

image.png

  • prefix: идентификатор префикса, значение по умолчанию V означает Versioned, R означает Repeatable
  • версия: Идентифицирует номер версии, состоящий из одного или нескольких чисел, разделителем между числами может быть точка или символ подчеркивания_.
  • разделитель: используется для разделения информации об идентификации и описании версии, по умолчанию используется два символа подчеркивания__
  • описание: информация описания, текст может быть разделен символами подчеркивания или пробелами
  • суффикс: последующий идентификатор, по умолчанию .sql

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

напиши в конце

[Мышление на стороне сервера]: давайте поговорим об основных технологиях на стороне сервера, а также обсудим структуру проекта и практический опыт первой линии Интернета. Пусть все сотрудники отдела исследований и разработок, работающие в одиночку, найдут свой собственный круг для общения и совместного обсуждения. Здесь мы можем совершенствовать наше познание, общаться с ведущими технологическими гигантами, соединяться с превосходными способами мышления, соединяться с кратчайшим путем для решения проблем, соединяться со всеми превосходными методами и разрушать ограничения познания.

Еще больше интересных статей в разделе «Серверное мышление»!