Миграции структуры Базы Данных
UPDATE: Эта статья несколько устарела. То что описано в ней является поделкой, которая была изготовлена на коленке ввиду острой необходимости в инструменте миграции БД в рамках одного проекта. Сегодня я готов представить сообществу более удобную разработку: MMP — Инструмент для миграции схемы MySQL в PHP проектах
Понадобился инструментик для миграций структуры таблиц БД. Есть недопиленная тулза в limb-project, но она не допилена, а допиливать ее времени не было.
В итоге родился небольшой скрипт.
В базе в табице db_version хранится текущая версия схемы БД.
Скрипты в папке sql/ создаются этой же тулзой и имеют timestamp в префиксе.
./sql.php create migration_name
Эта комманда в консоли создаст файл типа sql/23498792_migration_name.sql. Остается только в ручную прописать туда запросы, а затем произвести миграцию базы. При таком подходе изменять базу напрямую нельзя, что является огромным минусом такого решения.
При загрузке скрипт будет грузить только те миграции, у которых версия(timestamp) больше, чем максимальная в db_version
Загрузка производится очень просто
bash
./sql.php load
А можно просто посмотреть запросы, которые пойдут в базу:
bash
./sql.php load dry
php
#!/usr/bin/env php <?php /* Инициализация DB от приложения - замените на свою */ Config::getInstance(); Db::init(); Config::getInstance()->parseDB(); /*************************************************************************/ $has_version_table=false; { if($table[0] == 'db_version') { $has_version_table = true; break; } } if(!$has_version_table) { } if($argc<2){ echo "./sql.php load [dry]\nOR\nsql.php create this_is_the_name_of_migration\n"; exit; } if($argv[1]==='load') { foreach($files as $file){ if($v>$version){ echo "Loading file: $file\n"; foreach($queries as $query) { echo $query,"\n"; } } } }elseif($argv[1] === 'create'){ }