Есть ли какой-либо способ автоматизированной миграции баз данных с помощью Дженкинса или бесплатного инструмента?

#mysql #database

Вопрос:

У меня есть приложение с 2 environments , т. е. одно — «разработка», другое — «производство». Теперь проблема в том , что раньше мы часто вносили изменения в базу данных для «разработки» db , но всякий раз, когда нам приходится развертывать production build , поэтому нам приходится вручную обновлять всю таблицу scehma и stored procedures т. Д. Итак, есть ли какой-либо бесплатный инструмент или jenkins метод, с помощью которого я могу написать script , который будет исполняемым, когда мне нужно будет развернуть production build , чтобы затем я запустил этот сценарий, и обновления development бд будут синхронизироваться production db ?

Комментарии:

1. Мне нравится, как rails обрабатывает миграции, и похоже, что некоторые люди потратили время на то, чтобы превратить кишки в отдельные драгоценные камни, возможно, взгляните на них (я не пробовал ни один из них). github.com/thuss/standalone-migrations или github.com/jhollinger/otr-activerecord или github.com/rosenfeld/active_record_migrations

Ответ №1:

Нет отдельного инструмента, с помощью которого вы могли бы это сделать, но вот шаги по созданию базы данных CI/CD :

  1. во-первых, управление исходным кодом вашей базы данных с помощью git, для этой цели существует множество инструментов.
  2. найдите инструмент сравнения файлов схемы / данных , который предоставляет вам дельта-файл на основе папки проекта с возможностью запуска из командной строки, чтобы вы могли автоматизировать его в Jenkins. что-то вроде sqldelta или dbforge studio , которые не являются бесплатными. ты можешь найти что-нибудь бесплатное. или вы можете подготовить их вручную и перейти ко второму шагу.
  3. вы можете использовать flyway (бесплатный инструмент) для управления сценарием миграции и даже для простого управления версиями
  4. используйте Дженкинса для автоматизации процесса.

Комментарии:

1. а как насчет всех хранимых процедур? как я сделаю процесс копирования всех этих хранимых процедур из базы данных разработки в рабочую базу данных?

2. Это включает в себя все изменения данных и схем

Ответ №2:

Используйте Apache NiFi(https://nifi.apache.org/) и запланируйте задания для извлечения. Это может быть запланировано через Windows или планировщик кукурузы. В нем так много источников и опций приемника, что вы можете настроить его в соответствии с вашими потребностями. Создайте первый поток для извлечения данных из исходной базы данных, и вывод этого потока будет вводом второго потока. Второй поток считает выходные данные первого потока и загружает данные в целевую БД. Он является открытым исходным кодом и имеет хорошую поддержку пользовательского интерфейса. Мы также работаем над PoC для StreamSet(https://streamsets.com/) для облачных миграций.

Комментарии:

1. Итак, в основном я хочу перенести свои изменения схемы и сохраненные прецеденты из одной БД в другую БД, так можно ли это сделать с помощью упомянутого вами инструмента?

2. Если вас интересует миграция объектов схемы и БД, пожалуйста, используйте Liquibase или Flyway. У нас есть конвейер GitLab, и оттуда мы можем развернуть эти изменения в Dev, Pilot и Prod env. Оба они совместимы с Maven/Java/Jenkins. мы используем и то, и другое в разных проектах. Лично мне нравится FlyWay, так как мы пишем отдельный сценарий для отката. Если у вас есть объекты управления версиями БД, вы можете добавить этап в свою работу в конвейере, чтобы переместить ее в Dev или Prod env. Используйте контроль версий для изменений схемы и объектов и NiFi для миграции данных БД.

3. не могли бы вы дополнить свой ответ этими предложениями? @Тушарк

4. @mcint Обычно мы храним наш Java или любой другой код в репозитории на основе Git. Затем мы создаем PR, чтобы продвигать код в другой среде. Конвейер CICD развернет этот код в вашей соответствующей среде. Давайте рассмотрим ваши сценарии DB DDL DML в качестве кода. Вы продвигаете свой код и повышаете PR. Как только PR будет одобрен и код объединен, FlyWay/Liquibase подключится к БД из конвейера и развернет недавно добавленные сценарии в среду разработки/тестирования БД. Это может быть простой java-проект или просто файл Maven pom со структурой папок для хранения сценариев БД. И создайте конвейер соответственно. Изображения докеров также доступны для обоих.