переезд с postgresql на mysql [РЕШЕНО]

Главные вкладки

Аватар пользователя bad4iz bad4iz 9 августа 2016 в 12:10
1

В связи с переездом на новый хостинг возник насущный вопрос как мигрировать с 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 заместо подключения к вашей базе
      <?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, ...
  • конвертируются только те таблицы, которые породили модули, включенные в данный момент. Если модуль выключен в момент миграции, в новую базу данных его таблицы не попадут.

Комментарии

Аватар пользователя baklanaft baklanaft 29 декабря 2016 в 20:27

*для миграции в 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, буду увеличивать тайминги