把圖丟給 GPT (Gemini 臭掉了 ),要她分析~~~
? 主要錯誤畫面最上面是: Discuz! Database Error
(0) notconnect
意思就是: Discuz! 無法連線到 MySQL / MariaDB 資料庫。 所以目前看起來不是 Discuz 網站程式本身壞掉,而是「網站 → 資料庫」這條連線出了問題。
? 圖中的 PHP Debug 錯誤最重要的是這幾行: forum.php第 57 行discuz_application->init()接著: source/class/discuz/discuz_application.php第 66 行discuz_application->_init_db()然後: source/class/discuz/discuz_application.php第 438 行discuz_database::init(...)再往下: source/class/discuz/discuz_database.php第 23 行db_driver_mysqli->connect(...)這一行最關鍵。 Discuz 正在透過 MySQLi 嘗試連接資料庫,但是連不上。 最後: db_driver_mysqli.php第 84 行db_driver_mysqli->halt(...)也就是連線失敗後,Discuz 停止執行並顯示錯誤。
? 最可能的原因通常可以從以下幾個地方查: 1. MySQL / MariaDB 沒有啟動這是第一個要檢查的。 例如 Linux 可以查看: systemctl status mysql或: systemctl status mariadb如果看到 inactive、failed、dead 之類,就代表資料庫服務可能沒在跑。
2. Discuz 的資料庫帳號密碼錯了檢查: config/config_global.php裡面的資料庫設定。 通常會看到類似: $_config['db']['1']['dbhost'] = 'localhost';$_config['db']['1']['dbuser'] = '資料庫帳號';$_config['db']['1']['dbpw'] = '資料庫密碼';$_config['db']['1']['dbname'] = '資料庫名稱';其中任何一個錯誤,都可能造成這個問題。
3. dbhost 有問題例如原本是: dbhost = 'localhost'但你的 MySQL 現在其實是在: 127.0.0.1或者資料庫在另一台伺服器。 有些環境下: localhost和: 127.0.0.1的連線方式不同,因此這個設定值得檢查。
4. MySQL Port 改了一般 MySQL 是: 3306如果你的資料庫改成其他 Port,例如: 3307Discuz 沒有跟著修改,也會出現無法連線。
5. 資料庫帳號沒有權限例如資料庫帳號: discuz_user可能還存在,但沒有權限存取: discuz_database也可能是 MySQL 的 Host 權限問題,例如: 'user'@'localhost'和: 'user'@'127.0.0.1'被 MySQL 視為不同來源。
⚠️ 目前不要先做的一件事不要看到 Database Error 就直接重裝 Discuz 或重新安裝資料庫。
從這張圖來看,目前沒有證據表示資料表損壞。
它比較明確地指向: Discuz → MySQL 的連線階段失敗
所以應該先確認 MySQL 是否正常運作 + Discuz 的 DB 設定是否正確。
------------------------------------------------------------------------------------------------------------------
然後,我問:
版本是 Discuz! X3.4..... 這幾天,三不五時,常常跳出這畫面..... 換了chrome→firefox→brave 也是一樣..... 以前都不會..... 有無可能是論壇Discuz版本太舊 ???
先講結論情況比較像: Discuz X3.4 → PHP → MySQL/MariaDB 這條連線偶爾失敗。 而不是: 瀏覽器的問題。 因為錯誤發生在伺服器端的 PHP: db_driver_mysqli->connect()也就是 Discuz 正在「連資料庫」時失敗。 所以換作不同瀏覽器都一樣,是很合理的。
瀏覽器根本還沒介入到這個問題的核心。 但「X3.4 太舊」確實值得注意目前公開的 Discuz! 資料顯示,X3.4 已經停止更新;
目前能找到的 X3.4 最新發布版本是 v3.4-20230520。官方相關版本庫也明確提到 X3.4 已停止更新。 而且 X3.4 的 PHP 相容性確實是老問題: 所以如果你的主機這幾年有偷偷把: PHP 7.4↓PHP 8.0↓PHP 8.1↓PHP 8.2 / 8.3那確實非常值得查。 ⚠️ 不過這個「偶爾發生」讓我更想查資料庫假設論壇平常時: 10:00 正常10:30 正常11:00 Database Error11:01 又正常12:00 正常13:20 又 Database Error13:21 又正常這種狀況,我反而會優先懷疑: ① MySQL / MariaDB 偶爾重啟例如: MySQL crash↓MySQL 自動重啟↓這幾秒/幾十秒 Discuz 連不上↓出現 (0) notconnect↓MySQL 恢復↓論壇又正常這跟你說的描述非常吻合。 ② 主機 RAM 不夠,MySQL 被系統殺掉這個也很常見。 例如: 網站流量+PHP+MySQL+其他服務記憶體突然吃滿。 Linux 可能把 MySQL/MariaDB 殺掉。 然後服務再重新啟動。 使用者看到的就是: Discuz! Database Error (0) notconnect
但過一下又好了。 ③ MySQL 連線數滿了例如同時連線太多: Too many connectionsDiscuz 就可能無法取得新的資料庫連線。 這種情況也可能是: 平常正常 → 某些時段突然出錯 → 過一陣子恢復 ④ 主機最近有更新 PHP / MySQL / MariaDB這個我非常建議仔細查。 因為: 以前都不會,這幾天開始常常出現
那就要問: 「這幾天伺服器有沒有發生什麼變化?」 例如主機商自動更新: PHP MySQL MariaDB OpenSSL OS Apache / Nginx PHP-FPM
等等。 尤其如果論壇 X3.4 很多年沒動,而主機環境一直在更新,就容易出現「以前沒問題,最近突然開始有問題」。 我現在最想知道的其實只有 4 個東西
先不用急著升級 Discuz。
先幫我確認這四個: ① PHP 版本在 Discuz 後台或者主機控制台看。 例如: PHP 7.4.33或: PHP 8.1.x ② MySQL / MariaDB 版本例如: MySQL 5.7或者: MySQL 8.0或者: MariaDB 10.6 ③ 用的主機是什麼?例如: 寶塔cPanelPleskUbuntuCentOSCloudLinuxNASVPS虛擬主機 ④ 最重要:出錯後多久自己恢復?例如: 出現錯誤,重新整理 10 秒後就好了
或者: 要等 1~2 分鐘才好
或者: 一直錯,要重啟 MySQL 才好
這個資訊非常有價值。 還有一件事我會特別提醒你
先不要因為這個錯誤就直接升級 X3.4 → X3.5。
因為老 Discuz 論壇通常會有: 第三方插件 模板 自訂 PHP 自訂資料表 UCenter 修改過的核心檔案
X3.4 → X3.5 不是單純「覆蓋檔案」那麼簡單。
而且如果真正的問題是 MySQL 偶爾掛掉,升級 Discuz 之後問題還是可能存在。 我建議我們先做一個很簡單的診斷你把這三個東西告訴我: Discuz:X3.4PHP:?MySQL/MariaDB:?主機環境:?如果你不知道 PHP / MySQL 版本也沒關係。 你可以把你的 寶塔 / cPanel / 主機控制台畫面截圖給我,我可以直接從畫面幫你找。 另外,如果你能告訴我: 「錯誤通常出現幾秒/幾分鐘後會自己恢復?」
我就可以進一步判斷,
到底比較像 MySQL 重啟、RAM 不足、連線數滿、PHP 相容性,
還是Discuz 版本真的不行了。 |