Mysql-миграция е и как да се приложи един прост PHP-скрипт, webdevkin

При разработката на уеб приложение, не веднъж, а в екип и / или в множество машини, рано или късно се сблъскват с проблема на синхронизация на регистрационния номер на проекта и бази данни. За източник на контрол има система за контрол на версиите, по-специално, Git. и за миграция база данни измислена.







Има много готови различни инструменти, които се занимават с миграцията, но!

Много често, всичко, което искаме - това е просто да попълните промените в базата данни, които са направени от друг разработчик или себе си на друга машина. И за предпочитане докато изразходване минимални усилия, включително проучването и създаването на непозната система. Освен това, не винаги имаме пълен достъп до сървъра, за да инсталирате инструменти добавката.

Затова всички, които се интересуват да научат как да се направи проста миграция полезност, написани петдесет линии на искане PHP код в статията.

Идеята за миграция

Идеята е доста проста: в проекта за създаване на отделна папка на SQL, SQL-къде да поставите файлове с миграции, това е, скриптове, които променят съдържанието на базата данни, както и един PHP файл, че миграцията и ролки.

Ние трябва да се вземат предвид две неща: първо, всяка миграция трябва да се извършва само веднъж, и второ, в строг ред. Това е разумно и необходимо, защото ако се стигне от колегите 2 миграция, един от които създава маса потребители, а другият добавя потребителите на изпитване, ние искаме да изпълнява скриптове са в тази последователност, а не добавяне на база данни за повече от едно пъти.

Проблемът с пуснати отново миграцията решим, писане в отделна таблица вече прекараха скриптове и реда за изпълнение за установяване на ясни правила за именуване на SQL-файла. Как е решен в кода, ще видим по-късно, но за сега ние се пристъпи към подготовката на самите (източник на цялата миграция и PHP-скрипт в края на статията) тест миграции

Създаване Тест на SQL скриптове

Нека да има база данни, наречена тест тест. Ние работим с него за известно време и реши да приложи на миграцията. Разумно е да се правило е първата миграция трябва да съдържа пълно разтоварване на съществуващите единици в базата данни. Изясняване: миграция от помощ не само постоянно да се разшири съществуващата база, но също така и да се търкаля същата тази база данни от нулата, например, за нови хора в екипа.

Преди започване на миграцията, предполагам, че тази база данни вече съществува, така че миграцията е много далече посоченото име на база данни. По мое мнение, че е добре, в смисъл, че от една машина програмист може да работи с различни бази данни и с различни версии. Ето защо ние се създаде база от сценария няма да бъде.

В случай на тест, помислете за този курс на събитията.
Миграцията първите роли на съществуващите данни и създава версии на маса - то съдържа вече са направени скриптове.






Вторият създава маса потребители с три полета: номер, електронна поща, парола.
Третият добавя трима потребители на тестови записи.
Четвърта добавя нова колона с активни потребители.

Напишете първата миграция: зареже база данни и настолни версии. Да предположим, че по време на въвеждането на миграция имаме масата за стоки с няколко продукти. Те трябва да се хвърлят в сценария и в един и същ скрипт за добавяне на таблица версии. В резултат на това, файлът ще изглежда така.
0000_base.sql

Файлът виждаме структурата на стоки и 2 линии на данни, както и версии. Тази таблица съдържа 3 колони: номер първичен ключ, име - името на файла с миграцията, създаден - датата на търкаляне. Както можете да си представите, в версиите ще сме добавяне на нов подвижен линия след миграцията. В същото време, останалите 3 ще създаде миграция.

Обърнете внимание на конвенциите за именуване на файлове - е важна част.
  • 0001_base.sql
  • 0002_add_users.sql
  • 0003_insert_data_into_users.sql
  • 0004_add_column_active_to_users.sql

Редни числа в началото на всеки файл, трябва да сортирате файловете правилно. Само в този случай, миграцията ще се извършва в правилния ред. След _ е кратко описание на миграцията, която трябва да се използва единствено за нашето удобство, за да разбере какво прави даден скрипт, без да погледне към него.

В нашата версия, ние приемаме, че миграцията няма да бъде повече от 9999 бройки, а броят винаги трябва да се състои от 4 цифри. Например, на 10 ще се нарича миграция 0010_description, и 101-I - 0101_description.

Сега ние сме готови да напишете PHP-скрипт, за да осъществяват миграцията - migration.php.

Писане на PHP-код, за да стартирате миграции

Ние смятаме, че трябва да бъде в състояние да направи.
  • На първо място, се изброят всички SQL на SQL файловете от папката.
  • На второ място, да разбера кои от тях имат по-рано Наката (сравни този списък с това, което е във версиите на масата).
  • На трето място, изсипете съдържанието на избраните файлове в базата данни в същото време пишете във вариантите на имената им.
Може би всички други операции са доста прости, да ги анализират, в хода на играта.
Можете да пишете код.

migration.php рамка, основните константи и функции

Ние трябва да напишете определени функции, за да се свърже с базата данни и общата логика на скрипта. Migration.php създадете файл в SQL Kinema си местоположение в непосредствена близост до миграциите и да го напиша, както следва:

Ходим върху кода.
  • На първо място, ние заявяваме, постоянна връзка с базата данни и версиите името на масата (тя ще бъде посочена в кода на няколко пъти).
  • функция connectDB връща MySQLi-обект за работа с базата данни.
  • getMigrationFiles ($ вр) връща списък на подходящи, все още не е завършено миграции.
  • мигрират ($ вр, $ файл) хвърля един миграция - от името на файла.
Тогава самата логика.
  • Ние се свърже с базата данни и да получите списък с текущите миграции.
  • Ако тя е празна, просто се появи съобщение, че базата данни е актуален.
  • Ако миграция файлове се след това тече за всяка функция мигрират, показване на името на файла за информация. И в крайна сметка пишем позитивно послание, че миграцията е завършена.
Сега имаме нужда от код за getMigrationFiles ()

Тогава Глоб функцията изтегли всички файлове в определена папка върху желаната маска * .sql.

След това е необходимо да се разбере, не за първи път, дали ние ще се търкаля миграция. Което може да се определи само с наличието на таблицата в версии на бази данни. Ние помним, че той е създаден още през първата миграция. Ако заявката покажи маси от тест като "версии" ще се върнат на празен списък, а след това на масата все пак, в променливата $ firstMigration пишат истината и връщането на функция, целият списък от файлове.

Ако не съществува маса версии, а след това ние приемаме от своя списък на файловете - вече приключи миграцията. И се върна от функционални файлове, които не са в таблицата с версии. Това ще ви помогне array_diff.

Всички необходими файлове списъка, който бе оставен да разбера как да се хвърлят на съдържанието в базата данни на - игрален мигрират.

Няма интерес към тази функция само shell_exec ($ команда) - изпълнението на низ $ команда в терминала. Изсипете съдържанието на SQL-файла в базата данни може да бъде отбор
MySQL -uuser -ppassword -h хост база данни -D