Как автоматизировать миграцию (схему и данные) для приложения PHP / MySQL

У меня есть приложение в PHP / MySQL. Я ищу автоматический способ обновления базы данных за приложением. Мне не нужно иметь совместимость со старыми версиями после его обновления.

Я прочитал статьи Джеффа и К. Скотта Аллена об этом.

Я все еще не уверен, как реализовать это для приложения PHP / MySQL.

Есть ли простой и хороший процесс для этого?

    Related of "Как автоматизировать миграцию (схему и данные) для приложения 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, я буду работать со следующим:

    • Для каждого изменения схемы создайте SQL-файл, который при запуске приведет вас от старой версии к новой версии (это может быть один файл на главную версию или множество небольших изменений).
    • Создайте отдельный файл, в котором перечислены все имена файлов SQL в том порядке, в котором они должны быть применены (самая старая сверху, самая новая внизу)
    • Создайте простую таблицу «управления версиями» (все, что ей нужно – это один столбец VARCHAR) в вашей базе данных

    Теперь вам нужно написать простой скрипт, который работает следующим образом:

    • Запросить таблицу версий для имени последнего используемого файла обновления SQL
    • Если есть новые файлы изменений SQL, которые нужно запустить, выполните их последовательно
    • запишите имя последнего используемого файла SQL

    Надеюсь это имеет смысл

    Попробуйте использовать этот инструмент для миграции схемы: https://github.com/idler/MMP/

    Я создал крошечный скрипт миграции для MySQL в PHP. Это хорошо для проектов на ранней стадии и для тех, кто не нуждается (еще) в более сложных сценариях миграции. https://github.com/kennberg/php-mysql-migrate

    Один из способов, которым вы можете это сделать, – выгрузить базу данных в большой sql-файл с помощью mysqldump. Просто возьмите этот файл и отправьте его в новую установку.

    Вы не можете. Вы либо

    1. Записывайте файлы обновлений со всеми sql-файлами, которые выполнялись на исходной среде, а затем выполняйте их (упомянутые выше), SVN-подобные. Нужен скрипт php для выполнения и ручной работы для написания sql

    2. Проведите анализ обоих окружений и предложите пользователю, какие обновления должны быть перенесены. В основном то же самое, что и первое, за исключением того, что у вас есть один большой шаг для миграции, а не много мелких кусков. SQLyog может анализировать различия для обеих схем и данных.

    Вы также можете использовать бесплатный API SqlQuerySync

    или создать для себя таблицу базы данных, управляющую запросами CREATE / ALTER / DELETE.

    Используйте migratedb https://github.com/malukenho/MigrateDB от @malukenho

    Программное обеспечение для работы с MySQL (может быть найдено на веб-сайте mysql) делает это. Тем не менее, это связано с повторяющимися нажатиями.

    У меня та же цель: миграция большой базы данных (более миллиона строк в некоторых таблицах). Я рассматриваю возможность использования https://phinx.org, который, похоже, подходит для миграции схемы, кроме того, он поставляется с возможностью отката для обеспечения безопасности.

    Вы можете попробовать эту библиотеку: mysql-version-control .

    Мне нравится этот, потому что он различает схему, данные ядра и данные теста. Но делает это таким образом, который по-прежнему очень прост в использовании.