Pull to refresh

Переезд с PostgreSQL на MySQL

Reading time2 min
Views12K
Не секрет, что 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. До этого был «чукча не писатель — чукча читатель».
Tags:
Hubs:
Total votes 51: ↑42 and ↓9+33
Comments51

Articles