Drupal: migration from PostgreSQL to MySQL


Не секрет, что Drupal 6.x не очень хорошо дружит с PostgreSQL. Верней ядро дружит, а вот отдельные contrib модули далеко не всегда. И вот надоело мне наблюдать периодически вываливающиеся warning’и и накладывать патчи – решил переехать на MySQL.

Google на всяческие запросы о такого рода переезде упорно выдавал миграцию в обратную сторону – MySQL to PostgreSQL, понятно почему, но не радует. Если выкинуть Drupal из контекста, то начинают находиться платные продукты и всяческие не идеальные скриптики. В итоге решил сделать все самостоятельно ручками.

Подопытные: drupal-6.8, mysql-5.0.70-r1, postgresql-8.0.15.

Последовательность:

  1. Не знаю почему, но как то так повелось, что эксперименты ставлю не на тестовых инсталляциях, а сразу на продакшн. Поэтому первым делом отключаем доступ к сайту. Я это сделал на frontend-сервере (nginx): своему айпишнику разрешил, а всем остальным запретил. И не потому, что не доверяю стандартному Drupal’овскому maintenance режиму, а потому что возможно понадобилось бы пару-другую раз прогнать процесс установки с нуля.
  2. Заходим в админку, отключаем и чистим всяческие кэши, индексы и логи, которые хранятся в базе – гемору от них при переносе будет больше чем пользы после.
  3. Сохраняем список включенных модулей. Я воспользовался плагином для Firefox – ScrapBook.
  4. Бэкапим данные текущей базы, причем без схемы:
    pg_dump -U postgres -D -d drupal > old_data.sql

    Вырезаем из этого дампа всё, кроме INSERT’ов.

  5. Создаем для Drupal’а базу и пользователя в MySQL.
  6. Переносим куда-нибудь текущий settings.php и запускаем процесс установки Drupal’а с нуля, указав созданных ранее пользователя и базу.
  7. После установки вносим необходимые правки в settings.php и включаем нужные модули, сверяясь с ранее сохраненным списком. Эта операция создаст в MySQL таблицы необходимые модулям.
  8. Просим phpmyadmin сделать дамп структуры таблиц MySQL с их принудительным DROP’ом – new_schema.sql.
  9. Объединяем дампы:
    cat new_schema.sql old_data.sql > install.sql
  10. В полученном файле search-replace’ом аккуратно заменяем названия столбцов вида “type” на type (с кавычками на без кавычек).
  11. Проверяем:
    mysql -u drupal -p drupal < install.sql

    В моем случае MySQL ругался исключительно на названия столбцов. Повторяем предыдущий и этот шаги до тех пор пока MySQL целиком не скушает install.sql.

  12. Мне дополнительных действий не потребовалось – сайт вернулся к работе, но уже на MySQL.
  13. И не забываем включить обратно кэши и доступ к сайту извне.

На всё-про-всё понадобилось порядка получаса – гуглил дольше.

P.S. Это мой первый пост на habr. До этого был “чукча не писатель – чукча читатель”.

, ,

blog comments powered by Disqus