当站长,是我的终身事业嘛~过去这二十多年里都在不停的折腾……
此前最后一次碰Discuz!系统应该是在2013年(而且是关站),近期“情怀泛滥”,就是想碰碰BBS这种上个互联网世代的东西…… 找到了当年 尊米论坛(bbs.zunmi.com) 关闭时的存档包(用的是x2.5版discuz测试版),然后就开始在本地电脑上折腾它。
如标题所写,三四天的折腾过程中最头疼的问题了!~ 找遍全网,别人说的改config文件呀,清理各种session呀,手工sql语句改密码呀…… 均无效!的确有发现跟我碰到同样问题的——却没有解决办法!
苦熬N多个小时,总算自己用“最笨的方式”完成了升级,在此分享给碰巧跟我同样问题却依然未解决的站长。
基本步骤如下:
第1步,用phpmyadmin或同类工具确认好,“无法登录管理员”的完整数据库还在,这是必须!
第2步,手工的,另外的再安装一份儿全新x3.5,记住admin的账号,今后会一直用它了(安装后在phpmyadmin类工具再确认前后两个数据库是否都在了,下面以“旧”和“新”说明)!
第3步,在旧数据库中的“_common_member”表上操作,导出,选择“仅数据”(不要结构),其它选项按需选择即可,拿到这个.sql文件后用vscode类文本编辑打开,删除admin那条后保存;
第4步,切换到新数据库,选择导入操作,就是第3步时刚去掉admin那条的那个 .sql 文件…… 然后等待完成!
第3和4两步骤在具体操作时可能碰到各种各样的问题,例如碰到某字段在新数据库中是不存在的…… 这种就是“被弃用”的,此时就得先在旧数据库中将“相应字段在结构管理员干掉先,然后再重来第3、4两步,直至完成之。(我在操作时就碰到个“videophotostatus”字段在新数据库中不存在)
第5步,针对需要的数据表,每个站长的情况均有区别,按需重复以上两步骤即可,具体我留意到的数据表附在最后供大伙参考!
第6步,别以为完成了,千万别在此时开放用户访问!还有坑——因为咱们是手工搬的数据,所以有的数据表存在“自增id序列”的坑……(别问我咋知道的😒)
还是用phpmyadmin或sql语句看看最大的一个用户id是多少,然后我们需要手工改两个用户表( _common_member 和 _ucenter_members )的自增,在phpmyadmin中操作是先选中表,然后点上面菜单的“操作”,找到“AUTO_INCREMENT”设置比当前最大用户id多1个的数字即可
(这步骤我是用SQL语句完成的,也写这儿供参考:
ALTER TABLE pre_common_member AUTO_INCREMENT = 10001;
ALTER TABLE pre_ucenter_members AUTO_INCREMENT = 10001;
上面的表名要改成你的新数据一致的表名,10001就是要设的值,这里假设了老用户最大id是10000)
第7步,我未解,也不知道能否有解的问题…… 这样admin是肯定登录正常了,那其他老用户呢?没错,无法直接登录,只能公告大家点“忘记密码”或管理员手台给手工操作去修改密码方可登录。有没有办法能把这个问题解决呢?眼下未知!
至于其它那些清缓存,重新统计啥数字的…… 那些不用我说了!
在第5步时承诺了要附上的我留意到的相关表和说明:
用户相关
_common_member:用户基本信息(就是我们跳过admin那个表 UID 1)。
_ucenter_members: 同步的用户数据表(这就是我提到了它启用了新加密算法保存密码的表,操作时同样要先删除admin对应的 UID 所在行后再向新数据库导入)
_common_member_profile:用户个人资料信息。
_common_member_count:用户计数信息,如发帖数、积分等。
_common_member_status:用户状态信息,如最后登录、在线状态。
_common_member_field_forum:用户论坛相关扩展字段。
_common_member_field_home:用户家园相关扩展字段,我没弄。
_common_member_validate:用户实名认证信息,我没弄。
论坛和帖子相关
_forum_forum:论坛版块信息。
_forum_thread:主题帖信息。
_forum_post:回帖信息。
_forum_post_tableid:帖子表 ID 信息(不同表管理不同的帖子存储)。
_forum_attachment:附件信息(如果有附件)。
_forum_attachment_n:附件存储表(n 为附件分表编号)。
权限和管理相关
_common_usergroup:用户组信息(包括权限设置)。
_forum_moderator:版主和管理员设置,我没弄。
积分和交易相关(我没弄)
_common_credit_log:积分日志,如果需要保留用户的积分变更记录。
_common_magiclog:道具相关日志。
_common_medallog:勋章相关日志。
其它可能需要的(我没弄):
_common_task:任务信息(如果使用任务系统)。
_home_doing:记录用户动态。
_home_blog:用户博客(如启用了家园模块)。
【写在最后】
在完成以上操作后即会晃然大悟,为何不“反向操作”呢?
我估计,也能行!(有人大胆尝试后记得分享给我结果哦😉)
在全程折腾后,我越来越清晰——其实遭遇这情况的问题根源是Discuz! X3.2 之后新增了“bcrypt”密码加密算法…… 虽然论坛用户数据表中存储的依然是md5方式加密的密码,但与之互通的uc_server的用户数据表中存储的却是“bcrypt”加密的。