昨天把我的一個 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 語句成功。

第一步完成了,還有一個重要的一步就是刪除 install 目錄中的 index.php,這個官方有說明,很多新手不知道。
然後清空瀏覽器快取後重新升級發現升級成功,不再陷入死迴圈。
寫在最後忠告:Discuz 升級時一定要備份資料庫,按照官方提示一步步操作,不要急於求成。另外 Discuz 出新版本時不要急於升級,等出了正式版穩定後再考慮升級。