共用方式為


針對適用於 MySQL 的 Azure 資料庫 - 彈性伺服器連線能力問題進行疑難排解

MySQL Community Edition 會在每個連線使用一個執行緒來管理連線。 因此,每個使用者連線都會在 mysqld 流程中取得專用的作業系統執行緒。

這種類型的連線處理方式會伴隨著潛在問題。 例如,若有大量使用者連線,則記憶體使用量會相當高,即使是閒置連線也不例外。 此外,使用數千個用戶連線時,內部伺服器爭用和內容切換額外負荷較高。

診斷常見的連線錯誤

每當您的 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例遇到連線問題時,請記住,這三個層級中的任何一個都可能發生問題:用戶端裝置、網路或 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例。

因此,每當診斷連線錯誤時,請務必考慮下列專案的完整詳細數據:

  • 用戶端,包括:
    • 設定 (內部部署、Azure VM 等等,或 DBA 電腦)。
    • 作業系統。
    • 軟體和版本。
  • 連接字串和任意包括的參數。
  • 網路拓撲 (相同區域?相同 AZ?防火牆規則?路由)。
  • 連線集區 (參數和組態),如果正在使用的話。

請務必判斷資料庫連線問題是否會影響單一用戶端裝置或數個客戶端裝置。 如果錯誤只影響數個用戶端的其中一個,則可能是該客戶端的問題。 不過,如果所有用戶端都遇到相同的錯誤,則問題更有可能位於資料庫伺服器端,或兩者之間有網路功能。

請務必考慮工作負載多載的潛力,特別是當應用程式在短時間內開啟大量連線時。 您可以使用「連線總計」、「作用中聯機」和「中止的連線」等計量來調查此情況。

當您從用戶端裝置或應用程式建立連線時,在 mysql 中的首個重要呼叫為 getaddrinfo,其會從提供 IP 位址的端點來執行 DNS 轉譯。 若收到該位址的執行失敗,MySQL 會顯示錯誤訊息,例如「2005 錯誤 (HY000):未知的 MySQL 伺服器主機‘mysql-example.mysql.database.azure.com’(11)」,以及結尾號碼 (11、110 等)。

用戶端錯誤 2,005 代碼

下表顯示某些客戶端錯誤 2,005 代碼的快速參考注意事項。

2005 錯誤代碼 注意事項
(11)「EAI_SYSTEM - 系統錯誤」 用戶端上的 DNS 解析發生錯誤。 不是 適用於 MySQL 的 Azure 資料庫 彈性伺服器問題。 在用戶端上使用 dig/nslookup 進行疑難排解。
(110) 「ETIMEDOUT - 連線逾時」 連線到用戶端 DNS 伺服器時發生逾時。 不是 適用於 MySQL 的 Azure 資料庫 彈性伺服器問題。 在用戶端上使用 dig/nslookup 進行疑難排解。
(0)「名稱未知」 DNS 無法解析指定的名稱。 檢查用戶端的輸入。 這可能是 適用於 MySQL 的 Azure 資料庫 彈性伺服器的問題。

mysql 中的第二個呼叫具有套接字連線能力,在查看錯誤訊息時,例如“ERROR 2003 (HY000):無法在 'mysql-example.mysql.database.azure.com' (111) 上聯機到 適用於 MySQL 的 Azure 資料庫 彈性伺服器”,最後的數位(99、110、111、113 等等)。

用戶端錯誤 2,003 代碼

下表顯示某些客戶端錯誤 2,003 代碼的快速參考注意事項。

2003 錯誤代碼 注意事項
(99) 「EADDRNOTAVAIL - 無法指派要求的位址」 此錯誤不是由 適用於 MySQL 的 Azure 資料庫 彈性伺服器所造成,而是在用戶端上。
(110) 「ETIMEDOUT - 連線逾時」 線上到提供的IP位址時發生逾時。 可能是安全性 (防火牆規則) 或網路功能 (路由) 問題。 通常,這不是 適用於 MySQL 的 Azure 資料庫 彈性伺服器的問題。 在用戶端裝置上使用 nc/telnet/TCPtraceroute 以進行疑難排解。
(111)「ECONNREFUSED - 連線遭拒」 當封包到達目標伺服器時,伺服器拒絕連線。 這可能是嘗試連線到錯誤的伺服器或錯誤的連接埠。 這也可能與目標服務(適用於 MySQL 的 Azure 資料庫 彈性伺服器)正在關閉、從故障轉移復原或進行損毀復原,但尚未接受連線有關。 此問題可能生在用戶端或伺服器端。 在用戶端裝置上使用 nc/telnet/TCPtraceroute 以進行疑難排解。
(113)「EHOSTUNREACH - 無法連線到主機」 用戶端裝置的路由表不包含資料庫伺服器所在網路的路徑。 檢查用戶端裝置的網路設定。

其他錯誤碼

下表顯示關於成功與資料庫伺服器建立網路連線後所發生問題的一些其他錯誤碼之快速參考說明。

錯誤碼 注意事項
錯誤 2013「失去對 MySQL 伺服器的連線」 連線已建立,但隨後失去。 如果嘗試連線的對象不是 MySQL (例如:使用 MySQL 用戶端連線連接埠 22 的 SSH),就可能發生這種情況。 如果超級使用者終止工作階段,也可能會發生此情況。 如果資料庫的工作階段逾時,也可能會發生此情況。 或者,也可能是資料庫伺服器在建立連線後出現問題。 在用戶端連線存留期間內的任何時間都可能發生這種情況。 它可能表明資料庫發生嚴重問題。
錯誤 1040「太多連線」 已連線的資料庫用戶端數目已經達到設定的最大數目。 需要評估針對資料庫建立如此多連線的原因。
錯誤 1045「拒絕使用者存取」 用戶端提供了不正確的使用者名稱或密碼,因此資料庫拒絕存取。
錯誤 2006「MySQL 伺服器已消失」 與上表中的錯誤 2013「失去對 MySQL 伺服器的連線」類似。
錯誤 1317「查詢執行已中斷」 當主要使用者停止查詢而非連線時,用戶端會收到的錯誤。
錯誤 1129「主機『1.2.3.4』因為發生多次連線錯誤而遭到封鎖」 使用‘mysqladmin flush-hosts’解除封鎖 - 若該機器的其中一個用戶端多次嘗試使用錯誤的通訊協定連結至 MySQL,在單一電腦中的所有用戶端將遭到封鎖 (連線至 MySQL 連接埠為其中一個範例)。 如錯誤訊息所示,資料庫的系統管理員用戶必須執行 FLUSH HOSTS; 以清除問題。

注意

如需連線錯誤的詳細資訊,請參閱部落格文章調查 適用於 MySQL 的 Azure 資料庫 彈性伺服器的連線問題。

後續步驟