Перенос базы пользователей (c Друпал5 на Друпал6) [Выполнено]

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

Аватар пользователя goodboy goodboy 4 мая 2010 в 20:21

Возникла задача перенести базу пользователей с сайта на Drupal5 на сайт на Drupal6. База пользователей - это список пользователей с аккаунтами, ролями, профилями и картинками. Насколько я понял, это таблицы files, profile_fields, profile_values, role, users, users_roles.

Я установил на обоих сайтах модуль Backup&Migrate, экспортировал указанные таблицы (структуру и данные) и импортировал на сайте с Drupal6. Теперь на новом сайте эти таблицы имеют формат Drupal5, что приводит, например к проблеме при создании материала (из-за отсутствия поля signature_format в таблице users); да и непонятно, что будет при добавлении новых файлов или пользователей, так как в Drupal6 поля-идентификаторы в этих таблицах стали автоинкрементными; и т.д. Я надеялся, что update.php исправит ситуацию, но этого не произошло. Кроме как воспользоваться phpmyadmin и вручную править структуру в таблицах (или же вручную править INSERT в файле экспорта) ничего на ум не приходит. Но это как-то ненадежно. Прошу помощи у сообщества, возможно кто-то уже решал подобную задачу.

Комментарии

Аватар пользователя Ромка Ромка 4 мая 2010 в 20:41

Модуль Backup & migrate тут не нужен. Последовательность действий такая:

  • снимаете дамп с базы сайта на пятом Друпале и разворачиваете его на новой базе,
  • ставите шестой Друпал, в settings.php в качестве базы указываете ту, что была сделана на предыдущем шаге,
  • запускаете upate.php.

После этого шестой Друпал конвертнет старую базу в свой новый формат и вы сможете вытащить таблицу юзеров и перенести ее на другой сайт на шестом Друпале.

Аватар пользователя goodboy goodboy 4 мая 2010 в 21:07

Ромка, спасибо за совет! Я рассматривал этот вариант, но пока не могу воспользоваться им, так как у меня нет прав на создание и разворачивания дампа БД. Нет также доступа к phpmyadmin, такие походные условия Smile

Да и база обширная, а требуется конвертнуть всего несколько процентов. А потом еще вытаскивать нужные таблицы. Сложновато как-то. А так - выбрал мышкой нужные таблицы, экспорт/импорт, осталось где-то указать (выставить флаг) что эти таблицы конвертировать. Ведь Drupal6 как-то понимает, когда, и, самое главное, каким образом конвертировать из старого в новый формат.

Аватар пользователя gorr gorr 5 мая 2010 в 10:38

Все-таки, попытаться как Ромка посоветовал, поставить Sypex dumper, стащить базу на локал сервер, проделать все, как посоветовал Ромка, нужные таблицы потом задампить и залить в новый сайт тем же дампером.

Аватар пользователя Ромка Ромка 5 мая 2010 в 10:54

"Goodboy" wrote:
Да и база обширная, а требуется конвертнуть всего несколько процентов.

Ну тогда, как вариант:

  • поставить голый пятый Друпал на локалхосте
  • слить только таблицу юзеров с рабочего сайта (не помню есть ли такой функционал в backup & migrate, но при желании и наличии админских прав это можно и через интерфейс друпала сделать)
  • развернуть таблицу на сайте сделанном в первом пункте
  • дальше действовать по инструкции из первого моего комментария.
Аватар пользователя goodboy goodboy 5 мая 2010 в 22:14

Спасибо всем откликнувшимся, но я решил для начала попробовать свою начальную задумку - изменить при помощи phpmyadmin структуру баз. Я установил модуль Schema, который сравнивает текущую структуру таблиц с эталонной и выдает отличия. Таким образом, я правил структуру и обновлял отчет модуля, пока Mismatch стал равен 0.

Трудность возникла при изменении таблицы Users. Я переименовал поле uid в uid2, отсортировал таблицу по uid2. Обнаружил две "дыры" в нумерации (...39, 40, 43, 44... ), добавил две записи. Затем создал поле uid c параметрами AUTO INCREMENT и выполнил запрос UPDATE users SET uid=uid2, после чего удалил uid2.

Надеюсь, дальше будет все хорошо.

Аватар пользователя Dan Dan 5 мая 2010 в 23:47

Жесть. Зачем всё это? Если только пользователи (без профилей, комментов и пр.), то достаточно таблицы users.

"Goodboy" wrote:
Трудность возникла при изменении таблицы Users. Я переименовал поле uid в uid2, отсортировал таблицу по uid2. Обнаружил две "дыры" в нумерации (...39, 40, 43, 44... ), добавил две записи. Затем создал поле uid c параметрами AUTO INCREMENT и выполнил запрос UPDATE users SET uid=uid2, после чего удалил uid2.

Это вообще зачем?

Аватар пользователя goodboy goodboy 6 мая 2010 в 10:54

Dan, я писал в топике, что нужен "список пользователей с аккаунтами, ролями, профилями и картинками.", поэтому таблицы users недостаточно.

В phpmyadmin поле uid упорно не желало становиться автоинкрементным с PRIMARY KEY. Удалось это сделать, только создав новое пустое поле, указав при добавлении поля одновременно автоинкремент и PRIMARY KEY.