RDS Proxy 疑難排解 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

RDS Proxy 疑難排解

接下來,您可以找到一些常見的 RDS Proxy 問題和 RDS Proxy CloudWatch 日誌上的資訊的疑難排解想法。

在 RDS Proxy 日誌中,每個項目都會以相關聯的 Proxy 端點名稱作為字首。此名稱可以是您針對使用者定義端點所指定的名稱。或者,它可以是執行讀取/寫入請求之代理default的預設端點的特殊名稱。如需代理端點的詳細資訊,請參閱使用 Amazon RDS 代理端點.

驗證代理的連線能力

您可以使用下列命令來驗證 連線中的所有元件,例如代理、資料庫和運算執行個體可以彼此通訊。

使用 describe-db-proxies命令檢查代理本身。也使用 describe-db-proxy-target-groups 命令來檢查相關聯的目標群組。檢查目標的詳細資訊是否符合您要與代理建立關聯的RDS資料庫執行個體 。使用如下命令。

aws rds describe-db-proxies --db-proxy-name $DB_PROXY_NAME aws rds describe-db-proxy-target-groups --db-proxy-name $DB_PROXY_NAME

若要確認代理可連線至基礎資料庫,請使用 describe-db-proxy-targets命令檢查目標群組中指定的目標。使用如下命令。

aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME

describe-db-proxy-targets 命令的輸出包含 TargetHealth 欄位。您可以檢查 State 內的 ReasonDescriptionTargetHealth 欄位,以檢查代理是否能與基礎資料庫執行個體進行通訊。

  • StateAVAILABLE 值表示代理可連線至資料庫執行個體。

  • StateUNAVAILABLE 值表示暫時或永久的連線問題。在這種情況下,請檢查 ReasonDescription 欄位。例如,如果 Reason 具有 PENDING_PROXY_CAPACITY 的值,請在代理完成其擴展操作後嘗試再次連線。如果 Reason 具有 UNREACHABLECONNECTION_FAILEDAUTH_FAILURE 的值,請使用來自 Description 欄位的解說,協助您診斷此問題。

  • State 欄位在變更為 REGISTERINGAVAILABLE 前,可能短暫具有 UNAVAILABLE 的值。

如果下列 Netcat 命令 (nc) 成功,您可以從您登入的EC2執行個體或其他系統存取代理端點。如果您不在與代理和關聯資料庫VPC相同的 中,此命令會報告失敗。您或許可以直接登入資料庫,而不必位於相同的 中VPC。不過,除非您位於相同的 ,否則無法登入代理VPC。

nc -zx MySQL_proxy_endpoint 3306 nc -zx PostgreSQL_proxy_endpoint 5432

您可以使用下列命令來確保您的EC2執行個體具有所需的屬性。特別是,EC2執行個體VPC的 必須與代理連線之 VPC的 相同。

aws ec2 describe-instances --instance-ids your_ec2_instance_id

檢查用於代理的 Secrets Manager 秘密。

aws secretsmanager list-secrets aws secretsmanager get-secret-value --secret-id your_secret_id

請確定 顯示SecretString的欄位get-secret-value編碼為包含 usernamepassword 欄位的JSON字串。下列範例顯示 SecretString 欄位的格式。

{ "ARN": "some_arn", "Name": "some_name", "VersionId": "some_version_id", "SecretString": '{"username":"some_username","password":"some_password"}', "VersionStages": [ "some_stage" ], "CreatedDate": some_timestamp }

常見問題與解決方案

本節說明使用 RDS Proxy 時的一些常見問題和潛在解決方案。

執行 aws rds describe-db-proxy-targets CLI 命令後,如果TargetHealth描述陳述 Proxy does not have any registered credentials,請確認下列事項:

  • 有已註冊的憑證,供使用者存取代理。

  • 存取代理所使用的 Secrets Manager 秘密IAM的角色是有效的。

建立或連線至資料庫代理時,您可能會遇到下列RDS事件。

類別 RDS 事件 ID 描述

失敗

RDS-EVENT-0243 RDS 無法佈建代理的容量,因為子網路中沒有足夠的 IP 地址可用。若要修正此問題,請確認您的子網路具有最低數目的未使用 IP 地址。若要確定執行個體類別的建議數量,請參閱 規劃 IP 地址容量

失敗

RDS-EVENT-0275

RDS 限制了與資料庫代理的一些連線 name。 從用戶端到代理的同時連線請求數量已超過限制。

建立新代理或連線至代理時,可能會遇到下列問題。

錯誤 原因或因應措施

403: The security token included in the request is invalid

選取現有IAM角色,而不是選擇建立新的角色。

連線至 MySQL Proxy 時,您可能會遇到下列問題。

錯誤 原因或因應措施
ERROR 1040 (HY000): Connections rate limit exceeded (limit_value) 從用戶端到代理的連線要求速率已超過限制。
ERROR 1040 (HY000): IAM authentication rate limit exceeded 從用戶端到代理進行IAM身分驗證的同時請求數量已超過限制。
ERROR 1040 (HY000): Number simultaneous connections exceeded (limit_value) 從用戶端到代理的同時連線要求數目超過限制。

ERROR 1045 (28000): Access denied for user 'DB_USER'@'%' (using password: YES)

代理使用的 Secrets Manager 私密不符合現有資料庫使用者的使用者名稱和密碼。更新 Secrets Manager 私密中的登入資料,或確認資料庫使用者存在,且具有與私密中相同的密碼。
ERROR 1105 (HY000): Unknown error 發生未知的錯誤。
ERROR 1231 (42000): Variable ''character_set_client'' can't be set to the value of value

character_set_client 參數設定的值無效。例如,該值ucs2無效,因為它可能會使 MySQL 伺服器當機。

ERROR 3159 (HY000): This RDS Proxy requires TLS connections.

您已在代理中啟用設定需要 Transport Layer Security,但您的連線包含 MySQL Client ssl-mode=DISABLED中的 參數。執行下列任何一項:

  • 為代理停用需要 Transport Layer Security設定。

  • 使用我的SQL用戶端ssl-mode=REQUIRED中 的最小設定連線到資料庫。

ERROR 2026 (HY000): SSL connection error: Internal Server Error

代理的TLS交握失敗。一些可能的原因包括:

  • SSL 是必要項目,但伺服器不支援。

  • 發生內部伺服器錯誤。

  • 發生錯誤的交握。

ERROR 9501 (HY000): Timed-out waiting to acquire database connection

代理等候取得資料庫連線逾時。一些可能的原因包括:

  • 代理無法建立資料庫連線,因為已達到最大連線數

  • 代理無法建立資料庫連線,因為資料庫無法使用。

連線至 PostgreSQL 代理時,您可能會遇到下列問題。

錯誤 原因 解決方案

ERROR 28000: IAM authentication is allowed only with SSL connections.

使用者嘗試使用 PostgreSQL 用戶端sslmode=disable中的 設定進行IAM身分驗證來連線至資料庫。

使用者需要使用 PostgreSQL 用戶端sslmode=require中 的最小設定連線到資料庫。如需詳細資訊,請參閱 PostgreSQL SSL支援文件。

ERROR 28000: This RDS proxy has no credentials for the role role_name. Check the credentials for this role and try again.

這個角色沒有 Secrets Manager 秘密

新增此角色的 Secrets Manager 秘密。如需詳細資訊,請參閱設定 RDS Proxy 的 AWS Identity and Access Management (IAM) 政策

ERROR 28000: RDS supports only IAM, MD5, or SCRAM authentication.

用來連線到代理的資料庫用戶端正在使用代理目前不支援的身分驗證機制。

如果您不使用IAM身分驗證,請使用 MD5或 SCRAM 密碼身分驗證。

ERROR 28000: A user name is missing from the connection startup packet. Provide a user name for this connection.

嘗試建立連線時,用來連線至 Proxy 的資料庫用戶端並未傳送使用者名稱。

使用您選擇的 PostgreSQL 用戶端設定代理的連線時,請務必定義使用者名稱。

ERROR 28000: IAM is allowed only with SSL connections.

用戶端嘗試使用IAM身分驗證進行連線,但未SSL啟用。

在 PostgreSQL 用戶端SSL中啟用 。

ERROR 28000: This RDS Proxy requires TLS connections.

使用者已啟用 選項,需要 Transport Layer Security,但嘗試在 PostgreSQL 用戶端sslmode=disable中與 連線。

若要修正此錯誤,請執行下列其中一項操作:

  • 停用代理的需要 Transport Layer Security選項。

  • 使用 PostgreSQL 用戶端sslmode=allow中 的最小設定連線到資料庫。

ERROR 28P01: IAM authentication failed for user user_name. Check the IAM token for this user and try again.

此錯誤可能由下列原因造成:

  • 用戶端提供了不正確的IAM使用者名稱。

  • 用戶端為使用者提供了不正確IAM的授權權杖。

  • 用戶端使用的IAM政策沒有必要的許可。

  • 用戶端為使用者提供過期IAM的授權權杖。

若要修正此錯誤,請執行下列動作:

  1. 確認提供的IAM使用者存在。

  2. 確認IAM授權權杖屬於提供IAM的使用者。

  3. 確認IAM政策具有足夠的 許可RDS。

  4. 檢查所使用的IAM授權權杖的有效性。

ERROR 28P01: The password that was provided for the role role_name is wrong.

此角色的密碼與 Secrets Manager 密碼不符。

在 Secrets Manager 中檢查此角色的秘密,看看密碼是否與 PostgreSQL 用戶端中使用的密碼相同。

ERROR 28P01: The IAM authentication failed for the role role_name. Check the IAM token for this role and try again.

用於IAM身分驗證的IAM權杖發生問題。

產生一個新的身分驗證符記,並在新的連線中加以使用。

ERROR 0A000: Feature not supported: RDS Proxy supports only version 3.0 of the PostgreSQL messaging protocol.

用於連線至代理的 PostgreSQL 用戶端使用 3.0 之前的通訊協定。

使用支援 3.0 訊息通訊協定的較新 PostgreSQL 用戶端。如果您使用的是 PostgreSQL psql CLI,請使用大於或等於 7.4 的版本。

ERROR 0A000: Feature not supported: RDS Proxy currently doesn't support streaming replication mode.

用於連線至代理的 PostgreSQL 用戶端正在嘗試使用串流複寫模式,而 RDS Proxy 目前不支援此模式。

在用於連線的 PostgreSQL 用戶端中關閉串流複寫模式。

ERROR 0A000: Feature not supported: RDS Proxy currently doesn't support the option option_name.

透過啟動訊息,用於連線至代理的 PostgreSQL 用戶端正在請求RDS代理目前不支援的選項。

在用於連線的 PostgreSQL 用戶端中,關閉上述訊息中不支援顯示為 的選項。

ERROR 53300: The IAM authentication failed because of too many competing requests.

從用戶端到代理進行IAM身分驗證的同時請求數量已超過限制。

降低使用 PostgreSQL 用戶端身分IAM驗證建立連線的速率。

ERROR 53300: The maximum number of client connections to the proxy exceeded number_value.

從用戶端到代理的同時連線要求數目超過限制。

減少從 PostgreSQL 用戶端到此RDS代理的作用中連線數。

ERROR 53300: Rate of connection to proxy exceeded number_value.

從用戶端到代理的連線要求速率已超過限制。

降低從 PostgreSQL 用戶端建立連線的速率。

ERROR XX000: Unknown error.

發生未知的錯誤。

聯絡 AWS Support 以調查問題。

ERROR 08000: Timed-out waiting to acquire database connection.

代理等候取得資料庫連線逾時。一些可能的原因包括:

  • 代理無法建立資料庫連線,因為已達到最大連線數

  • 代理無法建立資料庫連線,因為資料庫無法使用。

可能的解決方案如下:

  • 檢查 狀態的目標,以查看是否無法使用。

  • 檢查是否有長時間執行和/或查詢正在執行的交易。他們可以使用來自連線集區的資料庫連線很長一段時間。

ERROR XX000: Request returned an error: database_error.

從 Proxy 建立的資料庫連線傳回錯誤。

解決方案取決於特定的資料庫錯誤。其中一個範例為 Request returned an error: database "your-database-name" does not exist。這表示指定的資料庫名稱不存在於資料庫伺服器上。或者,它表示用作資料庫名稱的使用者名稱 (如果未指定資料庫名稱) 不存在於伺服器上。