合并两个Ucenter
情况是这样的:因为一些历史原因,网站使用了两个互不相关的Ucenter,一个库名为Ucenter版本是1.0,给UCHome使用,另一个库名是Ucenter2版本为1.5,给Discuz! 7.2和Supersite以及X-Spaces使用,现在因为要将所有的应用都升级到Discuz X 1.5,所以需要先将两个Ucenter合并,再进行升级工作。
大概流程:将UChome 1.0升级到1.5使之版本相同,由于Ucenter2更大故以Ucenter2为合并后的主Ucenter程序,记录下此时Ucenter2的最大用户uid(这里是169327),由于检测到Ucenter和Ucenter2中有少量重名用户,(暂无法判断是否为同一用户),于是先在Ucenter中重复用户名后添加_home以做标记:
首先解决重名问题
//SELECT a.`username` FROM `ucenter2`.uc_members a, `ucenter`.uc_members t WHERE a.`username` = t.`username`;
//update `ucenter`.uc_members set username=concat(username,+'_home') where (`ucenter`.uc_members.username) in (select username from `ucenter2`.uc_members);
//update `ucenter`.uc_members set username=concat(username,+'_home') where (`ucenter`.uc_members.username) in (SELECT a.`username` FROM `ucenter2`.uc_members a, `ucenter_bak`.uc_members t WHERE a.`username` = t.`username`);
//SELECT 'uid' FROM `ucenter2`.uc_members WHERE `ucenter2`.uc_members.uid in (SELECT `ucenter2`.uc_members.uid FROM `ucenter2`.uc_members GROUP BY `ucenter2`.uc_members.uid HAVING count(`ucenter2`.uc_members.uid) >1);
//create table `ucenter2`.tmptable as (SELECT `ucenter2`.uc_members.username FROM `ucenter2`.uc_members GROUP BY `ucenter2`.uc_members.username HAVING count(``ucenter2`.uc_members.username) >1);
create table `ucenter2`.tmptable as (SELECT a.`username` FROM `ucenter2`.uc_members a, `ucenter`.uc_members t WHERE a.`username` = t.`username`);
update `ucenter`.uc_members set username=concat(username,+'_home') where exists (SELECT username FROM `ucenter2`.tmptable where `ucenter2`.tmptable.username = `ucenter`.uc_members.username);
接下来修改Ucenter中与uid有关的部分,在原来Uid的基础上加上Ucenter2中Uid的最大值(这里是169327):
//修改次ucenter的uid号码
update `ucenter`.uc_friends set uid=uid+169327,friendid=friendid+169327,version=version+10555 ;
update `ucenter`.uc_members set uid=uid+169327 ;
完成Ucenter中的相关修改后将ucenter数据导入Ucenter2中
//将次ucenter导入主ucenter2中
//insert ignore into ucenter2.uc_members select * from ucenter_gbk.uc_members;
insert into ucenter2.uc_members select * from `ucenter`.uc_members;
insert into `ucenter2`.uc_friends select * from `ucenter`.uc_friends;
接下来修改Uchome中与Uid有关的部分
//修改uchome中的uid
update `uchome_gbk`.uch_member set uid=uid+169327;
update `uchome_gbk`.uch_userappfield set uid=uid+169327;
update `uchome_gbk`.uch_blogfield set uid=uid+169327;
update `uchome_gbk`.uch_space set uid=uid+169327;
update `uchome_gbk`.uch_comment set uid=uid+169327,authorid=authorid+169327;
update `uchome_gbk`.uch_spacefield set uid=uid+169327;
update `uchome_gbk`.uch_blog set uid=uid+169327;
update `uchome_gbk`.uch_pic set uid=uid+169327;
update `uchome_gbk`.uch_friend set uid=uid+169327,fuid=fuid+169327;
update `uchome_gbk`.uch_spaceinfo set uid=uid+169327;
update `uchome_gbk`.uch_tagspace set uid=uid+169327;
update `uchome_gbk`.uch_poke set uid=uid+169327,fromuid=fromuid+169327;
update `uchome_gbk`.uch_post set uid=uid+169327;
update `uchome_gbk`.uch_feed set uid=uid+169327;
update `uchome_gbk`.uch_creditlog set uid=uid+169327;
update `uchome_gbk`.uch_notification set uid=uid+169327;
update `uchome_gbk`.uch_tag set uid=uid+169327;
update `uchome_gbk`.uch_vote set user_id=user_id+169327;
update `uchome_gbk`.uch_doing set uid=uid+169327;
update `uchome_gbk`.uch_share set uid=uid+169327;
update `uchome_gbk`.uch_sheep set uid=uid+169327;
update `uchome_gbk`.uch_stockmarket set UserID=UserID+169327;
update `uchome_gbk`.uch_thread set uid=uid+169327;
update `uchome_gbk`.uch_docomment set uid=uid+169327;
update `uchome_gbk`.uch_stock_wealthlist set uid=uid+169327;
update `uchome_gbk`.uch_album set uid=uid+169327;
update `uchome_gbk`.uch_usertask set uid=uid+169327;
update `uchome_gbk`.uch_visitor set uid=uid+169327,vuid=vuid+169327;
update `uchome_gbk`.uch_class set uid=uid+169327;
update `uchome_gbk`.uch_userapp set uid=uid+169327;
update `uchome_gbk`.uch_magicinlog set uid=uid+169327;
update `uchome_gbk`.uch_invite set uid=uid+169327;
update `uchome_gbk`.uch_magicuselog set uid=uid+169327;
update `uchome_gbk`.uch_im_config set uid=uid+169327;
update `uchome_gbk`.uch_clickuser set uid=uid+169327;
update `uchome_gbk`.uch_usermagic set uid=uid+169327;
update `uchome_gbk`.uch_poll set uid=uid+169327;
update `uchome_gbk`.uch_eventinvite set uid=uid+169327;
update `uchome_gbk`.uch_mtaginvite set uid=uid+169327,fromuid=fromuid+169327;
update `uchome_gbk`.uch_userevent set uid=uid+169327;
update `uchome_gbk`.uch_show set uid=uid+169327;
update `uchome_gbk`.uch_spacelog set uid=uid+169327;
update `uchome_gbk`.uch_event set uid=uid+169327;
update `uchome_gbk`.uch_topicuser set uid=uid+169327;
update `uchome_gbk`.uch_show set uid=uid+169327;
update `uchome_gbk`.uch_show set uid=uid+169327;
至此两个Ucenter的合并就基本完成了,经过测试此时uchome和Discuzx 7.2、Supersite、X-Space已经可以互通,唯一的缺陷是原来Ucenter中的用户头像可能会丢失。
接下来可以用Discuz官方提供的所有版本升级到Discuz X 1.5程序将所有数据导入到Discuz x1.5,其实官方提供的所谓升级工具只是一个数据转换工具,转换之后很多原来应用中的特性都会丢失,比如X-Space的用户附件空间、文件空间等,所以请用到的TX请注意这一点。
待升级到Discuzx 1.5完成之后,可以通过以下方法合并之前账户名重复的帐号
原账号:Holmesian
UID:7791
计划合并账号:Holmesan_home
UID:188785
UPDATE `ecjtu_discuzx`.`ecjtu_home_friend` SET fuid = '7791' where fuid='188785';
UPDATE `ecjtu_discuzx`.`ecjtu_home_friend` SET uid = '7791' where uid='188785';
UPDATE `ecjtu_discuzx`.`ecjtu_home_blog` SET uid= '7791' where uid='188785';
UPDATE `ecjtu_discuzx`.`ecjtu_home_blogfield` SET uid = '7791' where uid='188785';