В связи с переездом на новый хостинг возник насущный вопрос как мигрировать с postgresql на mysql в Drupal 7
Отсутствующий как всегда программист, ответственный за сайт, не смог ответить на вопросы: что, где и как лежит, и зачем это нужно. Пришлось копаться вслепую.
В drupal конечно есть замечательный модуль migrate но чтобы его использовать, нужно изрядно попотеть, изучить документацию, написать классы миграции в своём модуле.
Решил пойду своим путем.
- Решил конвертировать базу данных на прямую. На просторах инета обнаружил массу программ для этого, одна из них DBConvert for MySQL & PostgreSQL программа конечно супер но она платная и не хотелось заморачиваться ради одной базы и одноразового переезда.
- Попытка номер два: конвертировать средствами самого postgres:
из консоли postgres подключаемся к базе$ psql -U your_base -h your_host -W
вводимCOPY (SELECT * FROM your_table) TO 'D:/your_table.csv' CSV;
на выходе получаем конвертированную в cvs таблицу.
но чет прописывать для каждой таблицы .......... - В поиске гугла затесалась страничка с описанием модуля DBTNG Migrator но и с ним обошлось ни все нормально и ни без танцев с бубном. Попытка номер три:
- устанавливаем модуль
-
прописываем в settings.php заместо подключения к вашей базе
<?php
$databases = array(
'default' =>
array(
'default' =>
array(
'database' => 'основная база данных',
'username' => 'пользователь',
'password' => 'пароль',
'host' => 'сервер',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
'your_second_db_alias' =>
array(
'default' =>
array(
'database' => 'вторая база данных',
'username' => 'пользователь',
'password' => 'пароль',
'host' => 'сервер',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
?> - включаем модуль
- В настройках модуля (admin/structure/dbtng-migrator). Если все подключения правильны, то обе базы видны на странице мигратора. Origin Database и Destination Database если все сходится то нажимаем Migrate.
- Hо тут меня ждал сюрприз - ничего ни завелось..... покопался отключил модули с багами и которые не нужны (дело в том что конвертируются только те таблицы, которые породили модули, включенные в данный момент) на всякий случай почистил кеш и... о чудо заскрипели шестеренки, все, модуль заработал, пошла конвертация.
- Переписал подключение к базе. У меня поломалась только менюшка с выпадающим списком покопавшись нашел что отвалилось подключение к библиотеке для работы с меню. Прописав заново путь к базе получил работающий сайт на новой БД.
некоторые особенности модуля:
- модуль может мигрировать данные только в пустую базу данных. Если есть совпадающие по именам таблицы, он не перезапишет их, а остановит работу. Поэтому мигрировать нужно в пустую базу данных;
- мигрировать/конвертировать таким образом можно любые базы данных, с которыми только умеет работать Drupal: MySQL, MSSQL, Oracle, MongoDB, SQLite, Postgres, ...
- конвертируются только те таблицы, которые породили модули, включенные в данный момент. Если модуль выключен в момент миграции, в новую базу данных его таблицы не попадут.
Комментарии
*для миграции в postgresql нужно прописать
<?php 'your_second_db_alias' =>
array(
'default' =>
array(
'database' => 'вторая база данных',
'username' => 'пользователь',
'password' => 'пароль',
'host' => '127.0.0.1', /** localhost не захотел работать */
'port' => '',
'driver' => 'pgsql',
'prefix' => '',
),
),?>
столкнулся с другой проблемой, если база большая вылезает Nginx 504 Gateway Time-out, буду увеличивать тайминги