昨天把我的一个 Discuz 论坛从 X2 升级到 X2.5 出现了问题,升级陷入死循环,具体提示如下:

死循环

update.php?step=waitingdb&nextstep=prepare&sql[]=5786554789722f09b8f635c20410e507&sql[]=[ee4f20b8582052367f5beb9bd19fea58] 正在升级数据,请稍后。。。

[时长]:113[状态]:copy to tmp table[信息]:ALTER TABLE pre_forum_post ORDER BY pid ASC

[时长]:113[状态]:Locked[信息]:ALTER TABLE pre_forum_post CHANGE `pid` `pid` INT(10) UNSIGNED NOT NULL, CHANGE `replycredit` `replycredit` int(10) NOT NULL default '0', CHANGE `status` `status` int(10) NOT NULL default '0', ADD UNIQUE KEY pid (pid), DROP PRIMARY KEY, ADD `position` INT(8) UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY(`tid`, `position`), DROP INDEX authorid, ADD INDEX authorid (authorid,invisible)

(跳转中。。。)

去 Discuz 官方论坛查找,发现好多人都遇到这个问题,官方也没有给予解决。由于以前经常升级 Discuz 所以这次没在意,也没有备份数据库。现在是返回 X2 也返回不了了,只能想办法升级到 X2.5 。于是仔细分析了一下 SQL 语句,发现升级 post 数据时便无法前进,原来原因出在这。找出原因后,果断的登录 phpadmin 进入论坛数据库。

数据库有两个,第一个 information_schema 可不是论坛的数据库,第二个才是。点击论坛数据库进入后进入表结构,把页面拉到最下面点击全选,然后在选中项选择修复表,然后是提示 sql 语句成功,然后再点击全选,在选中项选择优化表,提示 SQL 语句成功。

phpadmin

第一步完成了,还有一个重要的一步就是删除 install 目录中的 index.php,这个官方有说明,很多新手不知道。

然后清空浏览器缓存后重新升级发现升级成功,不再陷入死循环。

写在最后忠告:Discuz 升级时一定要备份数据库,按照官方提示一步步操作,不要急于求成。另外 Discuz 出新版本时不要急于升级,等出了正式版稳定后再考虑升级。