Устойчивый мир для нас — это устранение неопределенности. В этом случае изменения базы данных приветствовали идею Active Record Migrations of Ruby.
А что для нас означает миграция? Что ж, это удобный способ последовательного и простого изменения схемы нашей базы данных, который устраняет большую неопределенность в отношении изменений базы данных в процессе разработки программного обеспечения.
Цель
Нашей целью будет поддержание жизненного цикла базы данных в соответствии с развитием и развитием проекта с абсолютным контролем над изменениями.
Для этого нам нужно найти простой инструмент с базовой группой характеристик, как следующие:
- Работает с любой базой данных, хотя сейчас наша база данных MySQL.
- Разрешить одновременным разработчикам работать независимо.
- Включить различные среды разработки.
- Возможность интеграции с любой системой контроля версий.
- Возможность легко интегрировать задачи миграции в Apache Ant.
- Разрешить прямую и обратную миграцию и конфликты, легко управляемые.
Мы выбираем инструмент MyBatis Migrations в качестве лучшего решения для нас и сценарий Ant GitHub для запуска команд MyBatis Migrations в качестве начальной строки.
Давайте перейдем к вопросу: как мы работаем с миграциями
С помощью этих инструментов мы думаем, что жизненный цикл миграции может быть таким
Первый раз
- Создайте каталог миграции в каталог нашего проекта.
- Загрузите файл миграции MyBatis Schema mybatis-migrations-3.1.1-bundle.zip .
- Создайте каталог lib и скопируйте
mybatis-3.2.3.jarиmybatis-migrations-3.1.1.jar. - Загрузите Ant-задачи build.properties и build.xml файлы из mybatis-migrations-anttasks-master.zip и переименуйте их в migrations.properties/xml для более ясных целей.
- Очевидно, что эти файлы определяют задачи муравья и основные свойства для инструмента миграции, в то время как migrations.properties (комментарии включены для четко) определяет
01020304050607080910111213141516171819202122232425
# Default environmentmybatis.default.environment=developmentmybatis.dir=migrationsmybatis.lib.dir=${mybatis.dir}/libmybatis.repository.dir=${mybatis.dir}/db# This directory contains your migration SQL files. These are the files# that contain your DDL to both upgrade and downgrade your database# structure. By default, the directory will contain the script to# create the changelog table, plus one empty example migration script.mybatis.scripts.dir=${mybatis.repository.dir}/scripts# Place your JDBC driver .jar or .zip files in this directory.# Upon running a migration, the drivers will be dynamically loaded.mybatis.drivers.dir=${mybatis.repository.dir}/drivers# In the environments folder you will find .properties files that# represent your database instances. By default a development.properties# file is created for you to configure your development time database# properties.# You can also create test.properties and production.properties# files. The properties file is self documented.mybatis.env.dir=${mybatis.repository.dir}/environmentsи migrations.xml определяет задачи муравья, как вы можете видеть в исходной документации . Конечно, вы должны переименовать его как свойство дескриптора файла XML, чтобы загрузить его
12345678<?xmlversion="1.0"encoding="UTF-8"?><projectname="MyBatis Migrations"basedir="."default="db:migrate:status"><propertyfile="migrations/migrations.properties"/>.....</project> - Но как его установить … Это легко, в основном мы должны выполнить:
1
$ ant -f migrations.xml db:migrate:initОн создает каталоги и исходные файлы, как они были определены в migrations.properties, как вы можете видеть в этом выходном журнале
010203040506070809101112131415161718192021222324252627Buildfile:/wpr/myproject/migrations/migrations.xmldb:migrate:init:[echo] ** Executing"migrate init"on"development"environment **-------------------------------------------------------------- MyBatis Migrations - init------------------------------------------------------------Initializing: dbCreating: environmentsCreating: scriptsCreating: driversCreating: READMECreating: development.propertiesCreating: bootstrap.sqlCreating: 20131123174059_create_changelog.sqlCreating: 20131123174100_first_migration.sqlDone!-------------------------------------------------------------- MyBatis Migrations SUCCESS-- Totaltime: 2s-- Finished at: Sat Nov 23 18:41:00 CET 2013-- Final Memory: 1M/117M------------------------------------------------------------.BUILD SUCCESSFULTotaltime: 3 secondsпока
- окружения , скрипты и драйверы являются каталогами (как видно ранее).
- README , который объясняет содержимое каталогов, как следует из названия.
- bootstral.sql , в который необходимо включить актуальную схему базы данных. Вам нужно начать с известного состояния.
- 20131123174059_create_changelog.sql содержит контрольную таблицу по умолчанию для инструмента миграции. Это цена, которую вы должны заплатить.
- 20131123174100_first_migration.sql будет вашим первым файлом миграции SQL. Вы можете удалить или переименовать его, хотя вы должны сохранить формат как ггггммдд ЧЧММсс_ .
- Сохранение свойств базы данных migrations / db / environment / development.properties для среды разработки
12345
## JDBC connection properties.driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/<databaseName>username=rootpassword=root - При необходимости добавьте другие файлы свойств среды в каждую миграцию / db / environment / <environment> .properties .
- В качестве последнего шага поместите вашу фактическую схему базы данных в файл bootstrap.sql .
День за днем
Среди всех команд переноса мы обычно используем
- Создайте одну или несколько миграций, выполнив db: migrate: new .
- Примените миграцию к базе данных, выполнив команду db: migrate: up .
Дополнительные шаги включены:
- Вернуть миграцию, если это необходимо для разрешения конфликтов. Любая ошибка может быть легко решена с помощью db: migrate: down … но помните, что это делается за один шаг .
- Примените отложенные миграции не по порядку, если это безопасно с помощью db: migrate: pending или db: migrate: version . На самом деле, если вы хотите выполнить эти задачи, вам придется добавить код, принадлежащий migrations.xml
0102030405060708091011121314151617181920
<?xmlversion="1.0"encoding="UTF-8"?><projectname="MyBatis Migrations"basedir="."default="db:migrate:status">....<!-- $ migrate pending --><targetname="db:migrate:pending"description="Runs all pending migrations regardless of their order or position in the status log"><migratecommand="pending"environment="${environment}"/></target><!-- $ migrate version --><targetname="db:migrate:version"description="Migrate the schema to any specific version"><inputaddproperty="specific.version"message="Specific version to migrate:"/><migratecommand="version"environment="${environment}"><extraarguments><argvalue="${specific.version}"/></extraarguments></migrate></target></project> - Создайте сценарии миграции для запуска в автономном режиме в средах, которые находятся вне вашего контроля.
- Получите статус системы в любое время, выполнив команду db: migrate: status .
Мы надеемся, что вы найдете наше решение полезным, все комментарии приветствуются и извинения за мой английский.