Не секрет, что Drupal 6.x не очень хорошо дружит с PostgreSQL. Верней ядро дружит, а вот отдельные contrib модули далеко не всегда. И вот надоело мне наблюдать периодически вываливающиеся warning'и и накладывать патчи — решил переехать на MySQL.
Google на всяческие запросы о такого рода переезде упорно выдавал миграцию в обратную сторону — MySQL to PostgreSQL, понятно почему, но не радует. Если выкинуть Drupal из контекста, то начинают находиться платные продукты и всяческие не идеальные скриптики. В итоге решил сделать все самостоятельно ручками.
Подопытные: drupal-6.8, mysql-5.0.70-r1, postgresql-8.0.15.
Последовательность:
На всё-про-всё понадобилось порядка получаса — гуглил дольше.
P.S. Не судите строго — это мой первый пост на habr. До этого был «чукча не писатель — чукча читатель».
Google на всяческие запросы о такого рода переезде упорно выдавал миграцию в обратную сторону — MySQL to PostgreSQL, понятно почему, но не радует. Если выкинуть Drupal из контекста, то начинают находиться платные продукты и всяческие не идеальные скриптики. В итоге решил сделать все самостоятельно ручками.
Подопытные: drupal-6.8, mysql-5.0.70-r1, postgresql-8.0.15.
Последовательность:
- Не знаю почему, но как то так повелось, что эксперименты ставлю не на тестовых инсталляциях, а сразу на продакшн. Поэтому первым делом отключаем доступ к сайту. Я это сделал на frontend-сервере (nginx): своему айпишнику разрешил, а всем остальным запретил. И не потому, что не доверяю стандартному Drupal'овскому maintenance режиму, а потому что возможно понадобилось бы пару-другую раз прогнать процесс установки с нуля.
- Заходим в админку, отключаем и чистим всяческие кэши, индексы и логи, которые хранятся в базе — гемору от них при переносе будет больше чем пользы после.
- Сохраняем список включенных модулей. Я воспользовался плагином для Firefox — ScrapBook.
- Бэкапим данные текущей базы, причем без схемы:
pg_dump -U postgres -D -d drupal > old_data.sql
Вырезаем из этого дампа всё, кроме INSERT'ов. - Создаем для Drupal'а базу и пользователя в MySQL.
- Переносим куда-нибудь текущий settings.php и запускаем процесс установки Drupal'а с нуля, указав созданных ранее пользователя и базу.
- После установки вносим необходимые правки в settings.php и включаем нужные модули, сверяясь с ранее сохраненным списком. Эта операция создаст в MySQL таблицы необходимые модулям.
- Просим phpmyadmin сделать дамп структуры таблиц MySQL с их принудительным DROP'ом — new_schema.sql.
- Объединяем дампы:
cat new_schema.sql old_data.sql > install.sql
- В полученном файле search-replace'ом аккуратно заменяем названия столбцов вида «type» на type (с кавычками на без кавычек).
- Проверяем:
mysql -u drupal -p drupal < install.sql
В моем случае MySQL ругался исключительно на названия столбцов. Повторяем предыдущий и этот шаги до тех пор пока MySQL целиком не скушает install.sql.
- Мне дополнительных действий не потребовалось — сайт вернулся к работе, но уже на MySQL.
- И не забываем включить обратно кэши и доступ к сайту извне.
На всё-про-всё понадобилось порядка получаса — гуглил дольше.
P.S. Не судите строго — это мой первый пост на habr. До этого был «чукча не писатель — чукча читатель».