Миграция схемы БД: MySQL+PHP
Мы, программисты, постоянно растем профессионально. Растем мы, растут и наши проекты, растут размеры Баз Данных. Чем больше проект, тем объемнее схема базы данных. Чем больше схема БД — тем труднее отслеживать ее изменения. ПРОБЛЕМКА НАРИСОВАЛАСЬ!
Несколько месяцев назад эта проблема начала мне мешать, и я стал пытать google на предмет mysql php migration, но ничего, что полностью удовлетворяло бы моим потребностям я так и не нашел. Попался интересный проект на google code, но он только создавал пустые PHP-классы с методами migrateUp и migrateDown. Мне такой подход показался интересным, но писать SQL для миграций вручную по моему не правильно. Программа может сравнить две структуры БД? Может! Тогда пускай программа этим и занимается. Именно тогда и было положено начало проекту MMP.
Странно... Программисты из разных стран ведут серьёзные разработки уже очень давно, а деплой БД остается проблемой до сих пор.
Требования к инструменту миграции
- Минимальный список зависимостей: PHP, MySQL
- Читабельность кода, который будет создан при генерации класса миграции
- Возможноть строить миграции именно по схеме БД, ни в коем случае не по конфиг файлу (как schema.yml в Doctrine)
- Возможность произвольно менять схему базы, затем выстраивать абсолютно такую же схему в других установках приложения.
Итак, сегодня я хочу представить бета-версию проекта Mysql Migration with PHP. Скачать архив с исходным кодом MMP ( mmp.tar.gz — 213Кб ) .
Что умеет Mysql Migration with PHP?
- создавать инициализационную версию схемы
- инициализировать БД с нуля
- создавать новые миграции
- обновляться до определенной даты (как вниз, так и вверх)
- показывать список существующих версий (миграций)
- сама генерит SQL-код внутри PHP-классов
Бета версия вполне работоспособна, и проверена мной в паре небольших проектов
bash
max@max:~/src/mmp$ ./migration.php MySQL Migration with PHP --------------------------------------------------------------------- help: display this help and exit schema: create schema for initial migration/installation init: load initial schema (install) create: create new migration list: list available migrations and mark current version migrate: migrate to specified time In migrate comand you can use strtotime format Examples: ********************************************************************* ./migrate.php migrate yestarday ./migrate.php migrate -2 hour ./migrate.php migrate +2 month ./migrate.php migrate 20 September 2001 ./migrate.php migrate ******************************************************************** Last example will update your database to last version --------------------------------------------------------------------- Licenced under: GPL v3 Author: Maxim Antonov <max.antonoff@gmail.com>
Все настройки храняться в config.ini в таком виде:
ini
max@max:~/src/mmp$ cat config.ini host=localhost user=max password= db=mmptest savedir=db verbose=On versiontable=dbversion max@max:~/src/mmp$
Системные требования: PHP-5.3 с поддержкой mysqli. Поясню неочевидные настройки:
- savedir - папка, где хранить миграции
- verbose - выдавать ли сообщения в STDOUT
- versiontable - таблица, которая будет создана в БД для хранения номеров версий.
P.S. Обращаться с вопросами и предложениями можно по адресу max dot antonoff at gmail dot com.