Вы здесь

переезд на другую базу данных [решено]

В связи с переездом на новый хостинг возник насущный вопрос как мигрировать с postgresql на mysql в Drupal 7
Отсутствующий как всегда программист, ответственный за сайт, не смог ответить на вопросы: что, где и как лежит, и зачем это нужно. Пришлось копаться вслепую.

В drupal конечно есть замечательный модуль migrate но чтобы его использовать, нужно изрядно попотеть, изучить документацию, написать классы миграции в своём модуле.

Решил пойду своим путем.

  1. Решил конвертировать базу данных на прямую. На просторах инета обнаружил массу программ для этого, одна из них DBConvert for MySQL & PostgreSQL программа конечно супер но она платная и не хотелось заморачиваться ради одной базы и одноразового переезда.
  2. Попытка номер два: конвертировать средствами самого postgres:
    из консоли postgres подключаемся к базе

    > $ psql -U your_base -h your_host -W

    вводим

    > COPY (SELECT * FROM your_table) TO 'D:/your_table.csv' CSV;

    на выходе получаем конвертированную в cvs таблицу.
    но чет прописывать для каждой таблицы ..........

  3. В поиске гугла затесалась страничка с описанием модуля DBTNG Migrator но и с ним обошлось ни все нормально и ни без танцев с бубном. Попытка номер три:
    • устанавливаем модуль
    • прописываем в settings.php заместо подключения к вашей базе

      >

    • включаем модуль
    • В настройках модуля (admin/structure/dbtng-migrator). Если все подключения правильны, то обе базы видны на странице мигратора. Origin Database и Destination Database если все сходится то нажимаем Migrate.
    • Hо тут меня ждал сюрприз - ничего ни завелось..... покопался отключил модули с багами и которые не нужны (дело в том что конвертируются только те таблицы, которые породили модули, включенные в данный момент) на всякий случай почистил кеш и... о чудо заскрипели шестеренки, все, модуль заработал, пошла конвертация.
    • Переписал подключение к базе. У меня поломалась только менюшка с выпадающим списком покопавшись нашел что отвалилось подключение к библиотеке для работы с меню. Прописав заново путь к базе получил работающий сайт на новой БД.
        $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' => '',
                            ),
                    ),
            );

некоторые особенности модуля:

  • модуль может мигрировать данные только в пустую базу данных. Если есть совпадающие по именам таблицы, он не перезапишет их, а остановит работу. Поэтому мигрировать нужно в пустую базу данных;
  • мигрировать/конвертировать таким образом можно любые базы данных, с которыми только умеет работать Drupal: MySQL, MSSQL, Oracle, MongoDB, SQLite, Postgres, ...
  • конвертируются только те таблицы, которые породили модули, включенные в данный момент. Если модуль выключен в момент миграции, в новую базу данных его таблицы не попадут.
2
1
09.08.2016 - 12:19

Комментарии

Аватар пользователя Chi
Chi – 10.08.2016 - 04:55

dbtng_migrator вообще не анализирует какие таблицы реально существуют в данный момент. Он просто загружает схемы активных модулей (см. hook_schema) и создает для них таблицы в новой базе. После этого используя всё тоже DBTNG API копирует данные в новые таблицы.

Ещё одна особенность: все изменения сделанные вне schema API, например дополнительные индексы или поля в новой базе сами не появятся.