Как сделать миграцию базы данных mysql

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Привет всем! Когда Я писал проект на python/django, там было замечательное дополнение South, которое позволяло на основании файлов моделей проекта, и таблицы баз данных строить файлы миграции, и применять их к БД.

Теперь Я участвую в создании проекта, который пишется на php/Yii, БД - MySQL. Какие средства есть для создания либо сразу .sql файлов миграций, либо каких-то промежуточных файлов, которые непосредственно мигратор сам применяет к БД?

2 ответа 2

Так в Yii есть миграции - yiic migrate create. Подробнее смотрите документацию: Миграции.

У нас командный проект, 2 команды, работающие в разных странах над одним проектом. Просто так взять sql dump и залить его на продакшн нельзя :] А phpmyadmin насколько мне известно не умеет делать sql-ные diff файлы

Вчера предо мной была поставлена задача - получить из имеющегося sql дампа базы данных MySQL - базу данных в MSSQL. Обратившись к всемирному разуму в виде поисковика Google - я нашел решение данной проблемы.

Вчера предо мной была поставлена задача - получить из имеющегося sql дампа базы данных MySQL - базу данных в MSSQL. Обратившись к всемирному разуму в виде поисковика Google - я нашел решение данной проблемы.

Первая необходимая нам для этой задачи вещь - это MySQL ODBC Connector, который можно скачать тут.

Установка и настройка коннектора весьма проста:

Следующий шаг - создание подключения из MSSQL в MySQL

Запустите Microsoft SQL Server Management Studio и выполните скрипт:


Скрипт создаст линк к MySQL использую установленный коннектор. Линк, Management Studio будет выглядеть приблизительно так:
Импорт данных из MySQL в MSSQL

Создайте новую базу данных (в примере она названа testMySQL). В Query window выполните следующий запрос для импорта таблицы shoutbox из MySQL базы tigerdb в MSSQL базу testMySQL:

Вот и все, далее, в зависимости от Ваших собственных навыков - или повторите вышеуказанный скрипт необходимое количество раз, или .

Я, например, просто получил список всех табличек в MySQL базу (show tables;) и написал сразу весь скрипт, который это все счастье заимпортировал.

От автора: разрабатывая веб-приложения, так или иначе, Вы работаете с кодом и формируете логику. При этом на определенных этапах, структура приложения может меняться. То есть, что то будет добавлено, что то удалено, что то оптимизировано и т.д. И это нормально для процесса разработки. Но согласитесь, если изменения затрагивают код, то они, так же, могут коснуться и структуры базы данных, опять же создание новых таблиц, добавление необходимых полей и т.д. Поэтому в данном уроке мы поговорим о таком понятии как миграции базы данных и рассмотрим специальную библиотеку, благодаря которой мы с легкостью сможем управлять миграциями.

скачать исходники
скачать урок

Для начала хотел бы отметить ,что миграция— обновление структуры базы данных от одной версии до другой (обычно более новой). При этом Вы должны понимать, что миграция не предусматривает перенос базы данных из одной системы управления базами данных в другую. Миграция – это изменение элементов входящих в структуру базы данных – то есть таблиц. К примеру, создание и удаление таблиц, добавление новых полей, редактирование существующих и т.д.

Соответственно, под версией понимается состояние структуры базы данных на определенный момент времени. К примеру, создание таблицы – версия 1. Создание следующей таблицы – версия 2. Добавление полей в первую таблицу – версия 3 и т.д. Таким образом, миграции реализуют контроль версий применительно к базам данных.


Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

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

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

Далее, кликая по кнопке “INSTALLNOW…” Вы увидите инструкции по установке данной библиотеки. Я буду выполнять установку с использованием инструмента composer, потому как он поставляется вместе с интерпретатором языка PHP, в программном обеспечении OpenSrver, которое я использую.

Соответственно открываем консоль OpenServer, переходим в каталог с разрабатываемым веб-приложением и выполняем следующие команды:

Перенос (миграция) MySQL на MS SQL Server базы Moodle

Дано: Moodle 2.8, установленный на Windows Server 2012 R2, с базой на MySQL.
Задача: перенести базу данных на СУБД Microsoft SQL Server 2014.

Процесс будет состоять из нескольких этапов:
1. Создание базы данных
2. Подготовка сервера с MSSQL.
3. Подготовка сервера с Moodle
4. Миграция базы данных
5. Настройка Moodle на работу с базой MSSQL

Если Вы хотите не перенести базу, а установить чистый Moodle на MS SQL Server, то можно сделать все те же этапы, кроме 4го.
Примечание: если на момент переноса базы Moodle сообщает о наличии новых версий, то делать обновление не рекомендуется, лучше сделать это после переноса базы. Максимум можно обновить плагины.

1. Создание базы данных
Создаем новую базу данных в MSSQL.


Обязательно ставим параметр Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON).

Следующие параметры ставим только если при переносе и использовании возникли проблемы (обычно драйвер для SQL, который мы установим в шаге 3 их не требует):
- Case sensitive collation (например, Latin1_General_CS_AS)
- ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)
- Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)


Также создаем пользователя для этой базы с правами owner.

2. Подготовка сервера с MSSQL
По умолчанию, SQL Server слушает 1433 порт по TCP/IP, поэтому необходимо открыть этот порт в FireWall (Inbound Rules):


Также нужно проверить, что протокол TCP/IP включен: SQL Server Configuration Manager -> Network Configuration -> Protocols -> TCP/IP enabled


3. Подготовка сервера с Moodle
Для начала необходимо настроить PHP на работу с СУБД MS SQL Server. Можно пропустить этот шаг, если подобная настройка уже производилась ранее.

В PHP менеджере в IIS - подключаем извлеченную из скаченного файла архива библиотеку (либо добавляем строку в php.ini):


(После этого в списке баз для конвертации в Moodle появится строка mssql)

Чтобы проверить, работает ли PHP с MSSQL, можно создать в IIS тестовый файл для проверки подключения к базе.

Тестовый PHP файл

4. Перенос базы
Теперь попробуем сделать непосредственно миграцию базы данных Moodle.
Заходим на сайт Moodle: Администрирование - Разработка - Экспериментальные возможности - Перенос базы данных:


На открывшейся странице в списке "Тип" выбираем "SQL Server":


Если пункта SQL Server нет, то делаем описанное выше (установка драйвера и т.п.) в шаге 3.

Заполняем поля соответственно созданной ранее базе данных в MSSQL и укажите префикс для создаваемых таблиц:

Чтобы начать конвертацию, нажимаем кнопку "Перенос данных". Что будет происходить: мудл создаст в новой базе свои таблицы и заполнит их данными из базы MySQL. Никаких перенастроек на текущем экземпляре Moodle не произойдет, он также продолжит работать на базе MySQL. Т.е. никаких изменений в мудл не будет, он только попытается создать базу. Поэтому если что-то при конвертации пошло не так, не стоит волноваться за работу Moodle.

Какие могут быть проблемы на данном этапе? В основном ошибки могут проявиться в таблицах сторонних компонентов, например, плагинов. Все схемы таблиц должны быть представлены в файле Moodle - install.xml, если какой-либо компонент не внес в него свои данные или было некорректное обновление, то при конвертации может появиться следующая ошибка:
Current database structure does not match all install.xml files.
Текущая структура базы данных соответствует не всем файлам install.xml.


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

После устранения проблемы, можно снова попробовать сделать перенос. Процесс переноса может длиться от нескольких минут до получаса. Операция переноса отчитается о созданных таблицах:



В данном отчете будут перечислены все созданные таблицы.

Также в процессе может возникнуть 500 ошибка. Большая вероятность, что сработал timeout. Желательно его увеличить на время переноса.

В итоге данной операции будет сформирована структура таблиц в базе MS SQL Server и перенесены данные.


5. Настройка Moodle на работу с базой MSSQL

Теперь нужно перенастроить конфигурационный файл Moodle на работу с новой базой. Открываем файл config.php в каталоге moodle и меняем строки:

Теперь можно запускать Moodle, чтобы проверить его работу с новой базой.
Если были необходимы обновления, то обновляем плагины, а затем и сам мудл.

Если возникнут проблемы, можно в файле php.ini установить след.параметры
• mssql.textlimit = 20971520
• mssql.textsize = 20971520


Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Читайте также: