У меня есть приложение в PHP / MySQL. Я ищу автоматический способ обновления базы данных за приложением. Мне не нужно иметь совместимость со старыми версиями после его обновления.
Я прочитал статьи Джеффа и К. Скотта Аллена об этом.
Я все еще не уверен, как реализовать это для приложения PHP / MySQL.
Есть ли простой и хороший процесс для этого?
У меня есть объект «Schema», который я использую, но вы можете сделать то же самое без классов.
Вы хотите создать таблицу db_schema_versions
:
CREATE TABLE db_schema_versions ( `table` varchar(255) NOT NULL PRIMARY KEY, `version` INT NOT NULL )
После того, как ваша база данных сможет отслеживать, на какой версии # она включена, она может автоматически обновлять SQL.
Вы должны заблокировать таблицу схем при обновлении схемы. Таким образом, у вас не будет двух запросов в тот же момент, пытаясь обновить вашу схему.
Итак – следите за версией, которую вы обновляете, – создайте большой переключатель – что-то вроде этого:
class SNTrack_Db_Schema extends MW_Db_Schema_Abstract { protected $table = "sntrack_db_schema"; protected $version = 5; protected function upgrade($fromVersion) { // don't break switch($fromVersion) { case 0: $this->db->query('CREATE TABLE sntrack_inbound_shipment ( `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT, `from` VARCHAR(255) NOT NULL, `date` DATE NOT NULL, `invoice` VARCHAR(255) NOT NULL, `notes` TEXT )'); $this->setVersion(1); case 1: $this->db->query('ALTER TABLE sntrack_details ADD `shipment_id` INT'); $this->db->query('ALTER TABLE sntrack_product ADD `inventory` INT NOT NULL DEFAULT 0'); $this->db->query('CREATE TABLE sntrack_inventory_shipment ( `shipment_id` INT NOT NULL, `product_id` INT NOT NULL, `qty` INT NOT NULL, PRIMARY KEY (`shipment_id`, `product_id`) )'); $this->setVersion(2); ...etc
Подобно предложению gnarf, я буду работать со следующим:
Теперь вам нужно написать простой скрипт, который работает следующим образом:
Надеюсь это имеет смысл
Попробуйте использовать этот инструмент для миграции схемы: https://github.com/idler/MMP/
Я создал крошечный скрипт миграции для MySQL в PHP. Это хорошо для проектов на ранней стадии и для тех, кто не нуждается (еще) в более сложных сценариях миграции. https://github.com/kennberg/php-mysql-migrate
Один из способов, которым вы можете это сделать, – выгрузить базу данных в большой sql-файл с помощью mysqldump. Просто возьмите этот файл и отправьте его в новую установку.
Вы не можете. Вы либо
Записывайте файлы обновлений со всеми sql-файлами, которые выполнялись на исходной среде, а затем выполняйте их (упомянутые выше), SVN-подобные. Нужен скрипт php для выполнения и ручной работы для написания sql
Проведите анализ обоих окружений и предложите пользователю, какие обновления должны быть перенесены. В основном то же самое, что и первое, за исключением того, что у вас есть один большой шаг для миграции, а не много мелких кусков. SQLyog может анализировать различия для обеих схем и данных.
Вы также можете использовать бесплатный API SqlQuerySync
или создать для себя таблицу базы данных, управляющую запросами CREATE / ALTER / DELETE.
Используйте migratedb https://github.com/malukenho/MigrateDB от @malukenho
Программное обеспечение для работы с MySQL (может быть найдено на веб-сайте mysql) делает это. Тем не менее, это связано с повторяющимися нажатиями.
У меня та же цель: миграция большой базы данных (более миллиона строк в некоторых таблицах). Я рассматриваю возможность использования https://phinx.org, который, похоже, подходит для миграции схемы, кроме того, он поставляется с возможностью отката для обеспечения безопасности.
Вы можете попробовать эту библиотеку: mysql-version-control .
Мне нравится этот, потому что он различает схему, данные ядра и данные теста. Но делает это таким образом, который по-прежнему очень прост в использовании.