如何解決 Lightsail 中託管的以 WordPress 為基礎的應用程式上的資料庫連線錯誤?

上次更新日期︰2021 年 9 月 28 日

連線至 WordPress 應用程式時,我收到以下一個或兩個錯誤:

  • 「建立資料庫連線時發生錯誤。」
  • 「一個或多個資料庫表格無法使用。資料庫可能需要修復。」

我該如何解決這些錯誤?

簡短描述

發生錯誤「建立資料庫連線時發生錯誤」的原因如下:

  • 存在損毀的資料庫表格。
  • 遠端資料庫連線已停用。
  • 資料庫服務已關閉。
  • 您的磁碟區空間不足。
  • 您的 WordPress 組態檔案中有不正確的登入憑證。

解決方案

損毀的資料庫表格

在瀏覽器中開啟您的網站 (例如,example.com/wp-admin) 的 wp-admin 頁面,並查找錯誤「一個或多個資料庫表無法使用。資料庫可能需要修復。」如果您看到此錯誤,則可能由於資料庫表格損壞而出現「建立資料庫連線時發生錯誤」錯誤。若要修復損毀的表格,請執行下列動作:

1.    使用文字編輯器,如 vi 編輯器存取 wp-config.php 檔案。

$ sudo vi wp-config.php

2.    在您的 wp-config.php 檔案中新增以下行。確保在「就是這樣,停止編輯!享受部落格」 之前新增一行。

define('WP_ALLOW_REPAIR' ,true);

3.    將上述設定新增至檔案之後,存取下列 URL,然後執行修復資料庫

/wp-admin/maint/repair.php (例如,example.com/wp-admin/maint/repair.php)

4.    執行資料庫修復後,移除新增至 wp-config.php 檔案的程式碼行。如果不移除該行,則任何人都可以在您的資料庫上執行修復。

已停用遠端資料庫連線

有時資料庫位駐留在遠端資料庫伺服器。如果資料庫伺服器不允許來自託管網站之執行個體的遠端連線,則您無法連線至資料庫。若要對錯誤進行疑難排解,請執行以下操作:

1.    檢查組態檔案 wp-config.phpDB_HOST 值。如果主機不是 localhost127.0.0.1,則資料庫駐留在遠端伺服器中,如下列範例所示:

define('DB_HOST', '192.168.22.9');

2.    嘗試在連接埠 3306 上從伺服器遠端登入至遠端伺服器器。如果您無法連線,則遠端伺服器上的資料庫組態不允許遠端連線。或者,遠端伺服器上有防火牆封鎖連線。請聯絡外部資料庫擁有者或支援,以取得允許 Lightsail 執行個體連線的協助。

這是將網站資料庫存放在 Lightsail 受管資料庫中,以達到高可用性和安全性的最佳實務。

資料庫服務關閉

注意:以下檔案路徑和命令可能會根據您的 Lightsail WordPress 執行個體是使用 MySQL 還是 MariaDB 而變更。此外,檔案路徑和命令會因執行個體是使用原生 Linux 系統套件 (方法 A),還是獨立安裝 (方法 B) 而有所差異。若要識別資料庫伺服器類型以及要遵循的方法,請執行下列命令:

test ! -f "/opt/bitnami/common/bin/openssl" && echo "Approach A" || echo "Approach B"
test -d /opt/bitnami/mariadb && echo "MariaDB" || echo "MySQL"

1.    如果您確認沒有資料表遭到損壞,並且沒有雲端資料庫連線問題,而 WordPress 仍然無法連線至資料庫,則您的資料庫伺服器可能會關閉。這可能是由於資料庫組態問題、伺服器上的流量過高、磁碟空間不足、可用記憶體不足等所致。使用下列命令檢查資料庫服務狀態:

MySQL 資料庫伺服器

sudo /opt/bitnami/ctlscript.sh status mysql

MariaDB 資料庫伺服器

sudo /opt/bitnami/ctlscript.sh status mariadb

2.    如果上述命令顯示資料庫處於停止狀態,則嘗試使用下列命令來啟動資料庫服務:

MySQL 資料庫伺服器

sudo /opt/bitnami/ctlscript.sh start mysql

MariaDB 資料庫伺服器

sudo /opt/bitnami/ctlscript.sh start mariadb

3.    如果您仍然無法啟動資料庫服務,而且在啟動程序期間看到錯誤,則檢查資料庫服務日誌,以識別根本原因並對問題進行疑難排解。主資料庫服務日誌檔案位於您的 Lightsail WordPress 執行個體中的下列其中一個位置:

遵循方法 A 的 MySQL 資料庫伺服器:/opt/bitnami/mysql/logs/mysqld.log

遵循方法 B 的 MySQL 資料庫伺服器:/opt/bitnami/mysql/data/mysqld.log

遵循方法 A 的 MariaDB 資料庫伺服器:/opt/bitnami/mariadb/logs/mysqld.log

遵循方法 B 的 MariaDB 資料庫伺服器:/opt/bitnami/mariadb/data/mysqld.log

資料庫效能和連線能力可能會受到磁碟空間不足及/或可用記憶體不足的影響。使用 dffree 命令來檢查這些資源。

磁碟區空間不足

如果磁碟區上的可用磁碟空間為 100% 或低於 100%,則資料庫服務可能會停止運作。

1.    執行以下命令:

$ sudo df -h

上述命令會列出可用磁碟空間量,如下列範例所示:

Filesystem      Size    Used     Avail      Use%    Mounted on
devtmpfs        1.9G     0       1.9G        0%     /dev
tmpfs           1.9G     0       1.9G        0%     /dev/shm
tmpfs           1.9G    400K     1.9G        1%     /run
tmpfs           1.9G     0       1.9G        0%     /sys/fs/cgroup
/dev/nvme0n1p1  8.0G    8.0G      0G        100%    /
tmpfs           389M     0       389M        0%     /run/user/1000

2.    如果命令輸出顯示您沒有足夠的可用空間,則可以將執行個體大小調整為較大大小。或者,您可以從伺服器刪除不必要的檔案,以建立可用空間。

3.    增加可用磁碟空間之後,重新啟動資料庫服務。

您的 WordPress 設定中的登入憑證不正確

WordPress 需要特定的資料庫連線字串以存取資料庫,其中包括使用者名稱、密碼和主機。如果任何這些項目已變更,則 WordPress 無法存取該資料庫。

1.    若要驗證您是否使用正確的連線字串,請在 wp-config.php 檔案中獲取連線字串詳細資訊 DB_NAME, DB_HOST, DB_USER and DB_PASSWORD

2.    使用連線字串從終端機存取資料庫。務必用您在步驟 1 中獲取的值取代 DB_NAMEDB_HOSTDB_USER

sudo mysql 'DB_NAME' -h 'DB_HOST' -u 'DB_USER' -p
Enter password: ********

注意:密碼不會在您輸入時顯示,因此,其他使用者不會看到密碼。

3.    在輸入密碼後按下 ENTER 鍵。

如果您在使用上述命令時收到存取遭拒錯誤,則通常表示憑證不正確。

如果您使用遠端資料庫主機,請在 wp-config.php 檔案中新增正確的連線字串。如果資料庫在同一個伺服器中,則確保 DB_NAMEbitnami_wordpress,且 DB_USERbn_wordpress

若要重設資料庫使用者密碼,請執行下列動作:

1.    使用以下命令來存取 /home/bitnami/bitnami_credentials。記下根資料庫密碼。

sudo cat /home/bitnami/bitnami_credentials

2.    使用以下命令登入 MySQL/MariaDB shell,然後輸入您從前面的命令得到的密碼。如果無法使用資料庫根密碼登入 shell,則重設密碼 (MySQLMariaDB)

sudo mysql -u root -p
Enter password: ********

3.    在 MySQL 或 MariaDB shell 中,執行下列查詢,以確定資料庫 bitnami_wordpress 已存在:

show databases;

4.    執行下列查詢,以確定資料庫使用者 bn_wordpress 已存在:

SELECT user FROM mysql.user;

5.    使用下列查詢重設資料庫使用者 "bn_wordpress" 的密碼。

注意:用您從 wp-config.php 檔案中獲取的密碼來取代 PASSWORD

MySQL 資料庫

alter user 'bn_wordpress'@'localhost' identified by 'PASSWORD‘;
alter user 'bn_wordpress'@'127.0.0.1' identified by 'PASSWORD‘;

MariaDB 資料庫

alter user 'bn_wordpress'@'%' identified by 'PASSWORD‘;

注意:如果上述任何解決方案都不起作用,可以使用備份快照復原執行個體。


此文章是否有幫助?


您是否需要帳單或技術支援?