Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

[经验] 合并两个DISCUZ论坛方法

[复制链接]
ctgu 发表于 2007-5-3 19:27:14 | 显示全部楼层 |阅读模式
两个DISCUZ论坛,我转的时候都是4.0(其中有一个是从DV转来的,具体过程请参考discuz论坛里的说明)
好,现在手头有两个discuz4.0的论坛了,名字就叫新的和旧的,我们的目的就是把旧的论坛数据导入新的论坛里,当然仅仅指帖子,用户就不
转了,毕竟很可能有重名的,目前还没有好的办法。
用实例介绍吧——

第1步.

旧论坛有四个版块,fid(就是版块号,鼠标放到论坛首页各个版块的文字上面就可以在状态栏看到版块号了,12345之类)分别是2,1,4,3。既然是合并嘛,肯定合到新论坛的相应版块去,不过新论坛各个版块的fid经常和旧的不同,没关系,不同改成相同就好。
新论坛对应的四个版块为5,2,4,3,那就把2换成5,1换成2,3换成4,4换成3。
因为转换的过程中可能出现冲突,比如3换4,4换3,干脆麻烦一点,2先换成15,1先换成12,3先换成14,4先换成13
在旧论坛里运行一下SQL:
Update cdb_threads SET fid=15 Where fid=2;
Update cdb_posts SET fid=15 Where fid=2;
Update cdb_threads SET fid=12 Where fid=1;
Update cdb_posts SET fid=12 Where fid=1;
Update cdb_threads SET fid=14 Where fid=3;
Update cdb_posts SET fid=14 Where fid=3;
Update cdb_threads SET fid=13 Where fid=4;
Update cdb_posts SET fid=13 Where fid=4;

接着把15,12,14,13的再换回5,2,4,3
在旧论坛里运行一下SQL:
Update cdb_threads SET fid=5 Where fid=15;
Update cdb_posts SET fid=5 Where fid=15;
Update cdb_threads SET fid=2 Where fid=12;
Update cdb_posts SET fid=2 Where fid=12;
Update cdb_threads SET fid=4 Where fid=14;
Update cdb_posts SET fid=4 Where fid=14;
Update cdb_threads SET fid=3 Where fid=13;
Update cdb_posts SET fid=3 Where fid=13;

好了,现在版块的问题解决了。

第2步.

修改tid和pid。
tid是什么?主题编号,pid呢?帖子编号。看看新论坛的首页——好家伙“共 8920 篇主题 / 107798 篇帖子”
那目前最大的tid就是8920,pid是107798
我们要做的就是把旧论坛最小的tid,pid变得比新论坛最大的还大,呵呵,加法我会!
在旧论坛里运行一下SQL
Update cdb_threads SET tid=tid+10000;
Update cdb_posts SET tid=tid+10000;
Update cdb_posts SET pid=pid+200000;

其中10000和200000是我自己设的,当然你也可以改成8920和107798,我觉得大一点保险。
好,每个帖子的编号就都搞定了,下面是作者。

第3步.

因为没打算把旧论坛的用户合并到新论坛,所以合并后点击作者名会出现错误,怎么半?把作者的编号统统改为一个!当然作者的姓名没改,帖子里依然正常显示,只不过点击的时候统一跳到你设置的那个用户头上。
先在新论坛里找个ID,我弄的是3,名字就叫老用户,再专门给他列个用户组,加个色,好和别人区别开来。
接着在旧论坛里运行一下SQL:
Update cdb_threads set authorid=3;
Update cdb_posts set authorid=3;

呵呵,所有的作者ID都变成3了。
至此,旧论坛的数据都改好了,反正大家根据自己的实际版块号写一写就行,下面是数据的导入导出,真正的合并了!

第4步.

介绍个工具,我就是用他导出旧论坛的数据的。
下载mysql_tool,解压后放到网站里,运行index.php,密码默认是123456,设置一下旧论坛的连接,然后连接。

【备份设置/Backup Options】
里点
【选择数据表 / Selected tables:】
,选中cdb_postscdb_threads ,点击
【开始备份】
等待……
OK,备份成功,
【数据备份已经完成,文件保存为:"sql_backup.sql".点击下载】
不急,想必大家都是在本地合并的吧,肯定都是同一个数据库里的。
点退出,再输123456进入,此时连接的依然是旧论坛,点
【[ 变更当前连接的数据库 ]】
设置新论坛的连接,然后连上。
这回可不是备份了,
【选择需要导入的数据/SQL File to restore:】
那一栏应该就是我们刚才备份的sql_backup.sql吧,呵呵,直接按
【开始导入】
OK,等几秒钟,开始恢复……
【错误!】
别急,出错就对了,咱是追加数据来着,不出错就覆盖了,呵呵,点
【忽略】
或者干脆点
【忽略可能出现的所有错误】

上厕所NN去吧,过程比较漫长,但不会说因为SQL比较大就白屏,这个程序不错的说~
4%8%12%……100%
【导入完毕!】
呵呵,小样,瞧啥啊,好了啊,赶紧登陆新论坛,进入后台更新统计更新缓存……
试试行了不?
嗯,说这么多,很详细了吧,一步步来肯定可以顺利合并两个discuz论坛的数据的。

还有一点,关于从服务器备份整个论坛数据库到本地,还有将本例中合并后的数据库恢复到服务器上,我用的是“帝国备份王”,很不错的东西(经验:必须先在class/config.php里设置好数据库连接再运行,不然不行的)
本文用到的工具mysql_tool和帝国备份王的网站下载:

点击下载mysql_tool


http://bbs.phome.net/ShowThread/?threadid=7082&forumid=27


ps.

前天合并了会员数据


先改一下cdb_memberfields和cdb_members里的uid全部加上一个比你目前会员数还大的数字,
比如
Update cdb_members SET uid=uid+10000;
Update cdb_memberfields SET uid=uid+10000;

然后用mysqltool,导出导入cdb_memberfields和cdb_members,那两个会员表,忽略所有错误
回复

使用道具 举报

白乐天 发表于 2007-5-3 19:41:12 | 显示全部楼层
恩,差不多就是这样,对于SQL熟悉,discuz表结构也熟悉的人来说,合并论坛并不难,需要就是细心和耐心。

关于用户重名,我记得有个检测工具的,你找一下,这个也可以解决。
回复

使用道具 举报

fale 发表于 2007-5-17 19:55:39 | 显示全部楼层
mysql_tool为什么我输入密码123456后进不去?我没有修改密码,直接解压的rar文件,放在论坛根目录下。
回复

使用道具 举报

fale 发表于 2007-5-18 09:21:34 | 显示全部楼层
谁可以帮一下忙?mysql_tool为什么一直登陆不上?我是自己的服务器,输入密码后点登陆无任何变化。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-9-12 14:19 , Processed in 0.119841 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表