近日把HelloMouse.COM论坛从Bryansoft迁移至Godaddy了。Bryansoft的服务器虽然速度比Godaddy快,并且无广告,但频频出现可恶的“High Load”,非常讨厌,再加上近期居然频频开始提示This Account Has Been Suspended、Please contact the billing/support department as soon as possible. ,连FTP都无法使用了,完全让人忍无可忍,最终使我决定迁移论坛。
| Service Unavailable The server can't process your request due to a high load, please try again later. |
迁移时的低级问题
有个问题折腾了我10天才搞定,请看下图:

在后台的运行记录的“密码错误”列表里,“尝试密码”一列并没有正确记录用户尝试输入的密码,而是一串类似MD5码的东西。因此我怀疑某个文件里包含了参与密码运算的某个函数,并且每次安装论坛所生成的都是唯一的。或者是Discuz与UCenter之间的通信出了问题。为此,我在全新安装了3次之后,把全部Discuz和UC文件迁移了过来。但结果仍然是相同的,密码仍然是那串MD5。
在一次无意中查看登录页面的代码之后,我终于找到了原因:我启用了登录密码加密功能。原来,折腾了我10天的问题,竟然是如此SB的没有任何技术含量的问题。启用登录密码加密之后,浏览器会把密码经过加密之后,才会发送至服务器,所以密码错误记录里显示的毫无疑问不再是用户通过键盘敲进的那串字符了。
此外,也有人在网上反映,从Discuz6.1升级过来的论坛开启登录密码加密后,部分用户登录时总是提示密码错误。看来这个功能确实还有待完善。
搬迁清单
迁移时,除了备份与恢复数据库以外,需要自己手动备份的文件夹有:
Discuz目录中的:
论坛模板 /templates/ 论坛附件 /attachments/ 自定义表情 /images/smiles/ 运行记录 /forumdata/logs/ UCenter目录中的:
用户头像 /data/avatar/ 运行记录 /data/logs/
善后工作
在某些情况下,可能需要进行一些善后工作。
修改UCenter表名前缀
如果Discuz和UCenter是使用单独安装包安装的,则它们两个的表名前缀是不同的,Discuz的是cdb_、UCenter的是uc_。
如果使用整合包安装,则Discuz的表名前缀是cdb_、UCenter的是cdb_uc_。
如果迁移前后都是全新安装,并且一个使用单独安装包、另一个使用整合安装包,此时就会出现Discuz和UC的表名前缀不同的情况。
例如,先前的论坛是单独安装的,新的论坛使用整合包安装,那么在安装时建立的表名前缀是cdb_uc_,而使用备份文件恢复时,向数据库中添加中的表名前缀为uc_。
由于论坛始终认为UC的表名前缀是cdb_uc_,所以并不会理会那些恢复出来的uc_,因此此时等同于没有恢复。有2种方法解决,一是修改UC目录中data文件夹里的config.inc.php,找到表名前缀并将其修改为uc_。然后从数据库中删除那些不再需要的cdb_uc_。但这样操作后,使用Discuz后台的数据库检验,会提示缺少那些删除的cdb_uc_数据表,看起来并不爽。
第二种方法就是先删除安装时建立的cdb_uc_:
DROP TABLE `cdb_uc_admins`, `cdb_uc_applications`, `cdb_uc_badwords`, `cdb_uc_domains`, `cdb_uc_failedlogins`, `cdb_uc_feeds`, `cdb_uc_friends`, `cdb_uc_mailqueue`, `cdb_uc_memberfields`, `cdb_uc_members`, `cdb_uc_mergemembers`, `cdb_uc_newpm`, `cdb_uc_notelist`, `cdb_uc_pms`, `cdb_uc_protectedmembers`, `cdb_uc_settings`, `cdb_uc_sqlcache`, `cdb_uc_tags`, `cdb_uc_vars`; 然后把uc_更名为cdb_uc_:
ALTER TABLE uc_admins RENAME TO cdb_uc_admins;
ALTER TABLE uc_applications RENAME TO cdb_uc_applications;
ALTER TABLE uc_badwords RENAME TO cdb_uc_badwords;
ALTER TABLE uc_domains RENAME TO cdb_uc_domains;
ALTER TABLE uc_failedlogins RENAME TO cdb_uc_failedlogins;
ALTER TABLE uc_feeds RENAME TO cdb_uc_feeds;
ALTER TABLE uc_friends RENAME TO cdb_uc_friends;
ALTER TABLE uc_mailqueue RENAME TO cdb_uc_mailqueue;
ALTER TABLE uc_memberfields RENAME TO cdb_uc_memberfields;
ALTER TABLE uc_members RENAME TO cdb_uc_members;
ALTER TABLE uc_mergemembers RENAME TO cdb_uc_mergemembers;
ALTER TABLE uc_newpm RENAME TO cdb_uc_newpm;
ALTER TABLE uc_notelist RENAME TO cdb_uc_notelist;
ALTER TABLE uc_pms RENAME TO cdb_uc_pms;
ALTER TABLE uc_protectedmembers RENAME TO cdb_uc_protectedmembers;
ALTER TABLE uc_settings RENAME TO cdb_uc_settings;
ALTER TABLE uc_sqlcache RENAME TO cdb_uc_sqlcache;
ALTER TABLE uc_tags RENAME TO cdb_uc_tags;
ALTER TABLE uc_vars RENAME TO cdb_uc_vars;修改appid
如果迁移前后Discuz的appid不一样(例如我的情况是迁移前为2,现需要改为1),则还需要进行如下操作:
ALTER TABLE `cdb_uc_notelist` CHANGE `app2` `app1` TINYINT( 4 ) NOT NULL ;
UPDATE `数据库名`.`cdb_uc_applications` SET `appid` = '1' WHERE `cdb_uc_applications`.`appid` =2 LIMIT 1 ;
UPDATE `数据库名`.`cdb_uc_protectedmembers` SET `appid` = '1' WHERE CONVERT( `cdb_uc_protectedmembers`.`username` USING utf8 ) = '用户名' AND `cdb_uc_protectedmembers`.`appid` =2 LIMIT 1 ;并修改Discuz目录下的config.inc.php,查找define('UC_APPID', '2');,将2改为1。
欢迎访问
论坛地址为:BBS.HelloMouse.COM