Discuz数据向MyBB平台的迁移需注意以下技术要点:
1. 数据结构差异对比
- 用户表结构:Discuz的pre_common_member表与MyBB的mybb_users表在密码加密(Discuz采用双重MD5+随机salt,MyBB使用单一MD5+salt)、注册时间字段(Discuz用regdate时间戳,MyBB用regdate日期格式)等存在差异
- 帖子内容:Discuz的pre_forum_post表与MyBB的mybb_posts表的差异需处理:
* 附件标记转换(Discuz用[attach]标签,MyBB用[attachment])
* 表情符号编码体系不同
* MyBB缺少Discuz特有的阅读权限设置字段
2. 关键数据迁移方案
- 用户数据迁移需处理:
- # 示例字段映射
- INSERT INTO mybb_users (username, email, password, salt, regdate)
- SELECT username, email,
- CONCAT(MD5(CONCAT(MD5(password), salt)), ':', salt) AS password,
- salt, FROM_UNIXTIME(regdate)
- FROM pre_common_member;
复制代码
- 版块结构迁移需注意:
* Discuz的fid与MyBB的fid可能冲突,需重建关联关系
* 版块权限体系差异(Discuz的forum_*权限字段与MyBB的usergroup权限系统)
3. 内容转换难点
- 帖子内容转换需处理:
* Discuz的[hide]权限隐藏标签需转换为MyBB的[hide]语法
* 楼层编号系统差异(Discuz使用pid,MyBB使用pid+reply关系)
* 最佳答案标记转换(若原Discuz安装问答插件)
4. 附件迁移方案
- 物理文件迁移路径调整:
- // Discuz附件路径示例
- $discuz_path = '/data/attachment/forum/202307/01/123456.jpg';
-
- // MyBB路径转换逻辑
- $mybb_path = '/uploads/attachments/'.date('Ym').'/123456.jpg';
复制代码
- 数据库附件记录同步需更新:
* aid对应关系
* 下载次数统计字段
* 附件描述信息转换
5. 数据清洗要求
- 需处理MyBB不支持的字符:
- $content = preg_replace('/[\x00-\x08\x0B-\x0C\x0E-\x1F]/', '', $discuz_content);
复制代码
- 时间戳转换:
- $mybb_dateline = date('Y-m-d H:i:s', $discuz_timestamp + 8*3600); // 时区修正
复制代码
6. 迁移后验证清单
- 必须检查的核心数据:
* 用户密码可用性验证(建议部分测试账户)
* 版块主题数/帖子数统计一致性
* 用户组权限继承关系
* 站内链接重定向规则(如tid到tid的映射)
建议采用分阶段迁移方案:
1. 先进行用户基础数据迁移
2. 其次处理版块结构
3. 最后实施帖子内容迁移
4. 附件和特殊内容最后处理
对于技术实施,推荐使用中间JSON数据过渡:
- // Discuz数据导出示例
- $data = array(
- 'users' => $db->query("SELECT uid,username,email FROM pre_common_member"),
- 'threads' => $db->query("SELECT tid,fid,subject FROM pre_forum_thread")
- );
- // MyBB数据导入适配
- foreach($data['users'] as $user){
- $mybbDB->insert('users', array(
- 'uid' => $user['uid'],
- 'username' => $user['username'],
- 'email' => $user['email']
- ));
- }
复制代码
注意需处理自增ID冲突问题,建议在MyBB安装时设置足够大的auto_increment起始值。整个迁移过程建议在测试环境完成完整验证后再实施生产迁移。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |