Миграция пользователей с другой CMS

Здравствуйте!
Уважаемые пользователи, подскажите есть ли скрипт или программа позволяющая автоматизировать процесс переноса пользователей, например, из prefix_users базы одного сайта в prefix_user базы другого сайта. Т.е. в скрипте указываем базу № 1, указываем какие поля из какой таблицы переносить в какую таблицу и какие поля базы № 2.
30 минут гуглопоиска не помогли.
Хотел перенести юзеров с php-nuke на livestreet

7 комментариев

avatar
В принципе эта задача одним запросом решается, если вам это разово сделать нужно, то вот запросы переноса из vBulletin в LS 0.3.1 (под php-nuke переделать, думаю, не сложно будет):

1. Перенос пользователей (ls — база с LS (предполагается свежеустановленный LS без пользователей), vb — база с vBulletin):
INSERT INTO ls.prefix_user (user_login, user_password, user_mail, user_date_register, user_ip_register, user_profile_icq) SELECT username, password, email, passworddate, ipaddress, icq FROM vb.user;

2. Создание персональных блогов новых пользователей:
INSERT INTO ls.prefix_blog (user_owner_id, blog_title, blog_description) SELECT user_id, CONCAT('Блог им. ', user_login), '' FROM ls.prefix_user

Суть такова — делаем insert, указываем нужные поля для переноса, и в качестве данных для insert подставляем результат select запроса из переносимой базы, соответственно поля выборки должны совпадать со вставляемыми в LS.

Возникает проблема с паролями — если принцип хранения разный (например, в исходном движке используется соль, а в LS — нет), то придется пользователей известить о смене пароля. Тут ситуации бывают разные.
  • kks
  • +2
avatar
Сделал перенос данных по вашим рекомендациям. Дело в том, что количество и содержание и полей не совпадает. Везде, где смог найти соответствия, перенёс. В остальных полях вставил дефолтные значения. Сделал это только для таблицы prefix_user. На всякий случай почистил кэш. Но на сайте новые пользователи в списке так и не появились. Нужно ещё где-то что-то прописать или почистистить чего-то?
avatar
В табличке prefix_user есть поле user_activate, проставьте там 1
avatar
перенес крупную базу юзеров, топиков и комментариев XOOPS на LS. Если кому нужно будет помочь — стучитесь.
avatar
Будет лучше, если хотя бы небольшую статейку напишешь на эту тему
avatar
ок, полностью закончу миграцию — напишу
avatar
Может кому понадобиться готовое решение по переносу юзеров с php-nuke на LS

Для начала необходимо таблицу юзеров php-nuke импортировать в базу LS (т.е. в базе будут 2 таблицы юзеров: prefix_user пользователи LS, prefix_users пользователи php-nuke)
1. С учетом совета kks запрос для переноса юзеров
INSERT INTO prefix_user (user_login, user_password, user_mail, user_date_register, user_ip_register, user_activate, user_profile_name, user_profile_country, user_profile_site, user_profile_icq, user_profile_about) SELECT username, user_password, user_email, user_regdate, last_ip, user_active, name, user_from, user_website, user_icq, CONCAT_WS(", ",user_interests, user_occ) FROM prefix_users;

prefix может быть другим
2. Запрос создание персональных блогов новых пользователей без изменений
INSERT INTO prefix_blog (user_owner_id, blog_title, blog_description) SELECT user_id, CONCAT('Блог им. ', user_login), '' FROM prefix_user

3. Преобразование формата даты регистрации юзеров к требуемому в LS (сохранить в файл, запустить скрипт)


<?php
error_reporting (E_ALL ^ E_NOTICE);
ini_set("max_execution_time", "300000");
mysql_connect("localhost", "root", "")
        or die("Could not connect");
mysql_select_db("name_db");
$result = mysql_query("SELECT username, user_regdate FROM prefix_users");
while(list($username, $user_regdate) = mysql_fetch_array($result))  {
$user_regdate = date("Y-m-d H:i:s", strtotime ($user_regdate));
mysql_query("UPDATE prefix_user SET user_date_register='".$user_regdate."' WHERE user_login='".$username."'");
} 

?>

Т.к. метод хранения паролей у обоих систем одинаков, юзеры могут входить на LS под своими старыми паролями

В данное время пытаюсь устроить общий вход, выход, регистрацию юзеров у двух систем.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.