如果是小数据,建议使用白乐天的工具。但是大数据是收费的,我在这里说一下思路。
我以整合用户和帖子两部分数据为例说明。
一、用户数据。
基本的方式可以参考多论坛整合共用同一UC的方法
过程可能比较繁琐,也很有可能出错,所以操作前务必做好备份。
首先要说明mysql的操作是用navicat进行的,比phpmyadmin要方便的多。
条件设定:
有两个论坛分别为bbs1和bbs2,设定bbs1为主论坛,bbs2为从论坛。bbs1用的数据库为sql1,bbs2用的数据库为sql2。将bbs2搬到bbs1上,与bbs1共用同一个uc1。
1.备份bbs1的所有表到bak1,备份bbs2的所有表到bak2。备份是重要的一步,我相信任何一个站长都知道应该备份,但是不得不再废话一次!
2.将bak1中的uc_members和cdb_members复制为uc1_members和cdb1_members;将bak2中的uc_members和cdb_members复制为uc2_members和cdb2_members
3.将DZ6.1安装包中的utilities\upgrade10.php复制到bbs2根目录下(论坛根目录),并执行,按提示操作,记下uid的偏移量x。
4.升级bak2中uc2_members和cdb2_members的uid
代码:
UPDATE uc2_members SET uid=uid+x;
UPDATE cdb2_members SET uid=uid+x;
如果uid+x后与现有uid重复,则会报错。可以先加个较大的值Y后,再减去一个Z,只要x=Y-Z就可以了。
5.将uc2_members和cdb2_members复制到bak1中,追加members数据
代码:
replace INTO `uc1_members` (`uid`,`username`,`password`,`email`,`regip`,`regdate`,`salt`)
SELECT `uc2_members`.`uid`,`uc2_members`.`username`,`uc2_members`.`password`,`uc2_members`.`email`,`uc2_members`.`regip`,`uc2_members`.`regdate`,`uc2_members`.`salt`
FROM `uc2_members`;
代码:
replace INTO `cdb1_members` (`uid`,`username`,`password`,`gender`,`adminid`,`groupid`,`regip`,`regdate`,`lastip`,`lastvisit`,`lastactivity`,`lastpost`,`posts`,`oltime`,`pageviews`,`credits`,`extcredits1`,`extcredits2`,`extcredits6`,`extcredits7`,`extcredits8`,`email`,`bday`,`sigstatus`,`showemail`,`newsletter`,`timeoffset`,`editormode`,`customshow`)
SELECT `cdb2_members`.`uid`,`cdb2_members`.`username`,`cdb2_members`.`password`,`cdb2_members`.`gender`,`cdb2_members`.`adminid`,`cdb2_members`.`groupid`,`cdb2_members`.`regip`,`cdb2_members`.`regdate`,`cdb2_members`.`lastip`,`cdb2_members`.`lastvisit`,`cdb2_members`.`lastactivity`,`cdb2_members`.`lastpost`,`cdb2_members`.`posts`,`cdb2_members`.`oltime`,`cdb2_members`.`pageviews`,`cdb2_members`.`credits`,`cdb2_members`.`extcredits1`,`cdb2_members`.`extcredits2`,`cdb2_members`.`extcredits6`,`cdb2_members`.`extcredits7`,`cdb2_members`.`extcredits8`,`cdb2_members`.`email`,`cdb2_members`.`bday`,`cdb2_members`.`sigstatus`,`cdb2_members`.`showemail`,`cdb2_members`.`newsletter`,`cdb2_members`.`timeoffset`,`cdb2_members`.`editormode`,`cdb2_members`.`customshow`
FROM `cdb2_members`;
cdb_members中的extcredits字段是自定义的,请根据实际情况增删。经简单测试,cdb_members不更新并不影响登录,有兴趣做测试的朋友测试一下多给点反馈意见。
6.比较bak1中uc1_members、cdb1_members和bbs1中uc_members、cdb_members各字段的值除password外是否相同,如果相同,那么恭喜你距离成功只差一步了。
7.用bak1中uc1_members、cdb1_members替换bbs1中uc_members、cdb_members。登录测试,成功!
二、帖子数据。
1.首先要查一下bbs1中的一些值,包括fid、fup、tid、pid,假设四者的最大值分别为fid1、fup1、tid1、pid1,记录四个值。
2.将两个备份库中的表复制到一起,bbs1的表前缀重命名为cdb1,bbs2的表前缀重命名为cdb2。
3.升级版块相关id
代码:
UPDATE cdb2_forums SET fid=fid+fid1;
UPDATE cdb2_forums SET fup=fup+fup1;
UPDATE cdb2_threads SET fid=fid+fid1;
UPDATE cdb2_posts SET fid=fid+fid;
4.升级主题相关id
代码:
UPDATE cdb2_threads SET tid=tid+tid1;
UPDATE cdb2_posts SET tid=tid+tid1;
5.升级帖子相关id
代码:
UPDATE cdb2_posts SET pid=pid+pid1;
6.升级用户相关id,这里的x就是上面合并用户时记下的值
代码:
UPDATE cdb2_threads SET authorid=authorid+x;
UPDATE cdb2_posts SET authorid=authorid+x;
7.合并版块
代码:
replace INTO `cdb1_forums` (`fid`,`fup`,`type`,`name`,`status`,`displayorder`,`styleid`,`threads`,`posts`,`todayposts`,`lastpost`)
SELECT `cdb2_forums`.`fid`,`cdb2_forums`.`fup`,`cdb2_forums`.`type`,`cdb2_forums`.`name`,`cdb2_forums`.`status`,`cdb2_forums`.`displayorder`,`cdb2_forums`.`styleid`,`cdb2_forums`.`threads`,`cdb2_forums`.`posts`,`cdb2_forums`.`todayposts`,`cdb2_forums`.`lastpost`
FROM `cdb2_forums`;
8.合并主题
代码:
replace INTO ...
阅读全文..