昨天把我的一個 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 出新版本時不要急於升級,等出了正式版穩定後再考慮升級。