本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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
內的 Reason
、Description
和 TargetHealth
欄位,以檢查代理是否能與基礎資料庫執行個體進行通訊。
-
State
的AVAILABLE
值表示代理可連線至資料庫執行個體。 -
State
的UNAVAILABLE
值表示暫時或永久的連線問題。在這種情況下,請檢查Reason
和Description
欄位。例如,如果Reason
具有PENDING_PROXY_CAPACITY
的值,請在代理完成其擴展操作後嘗試再次連線。如果Reason
具有UNREACHABLE
、CONNECTION_FAILED
或AUTH_FAILURE
的值,請使用來自Description
欄位的解說,協助您診斷此問題。 -
State
欄位在變更為REGISTERING
或AVAILABLE
前,可能短暫具有UNAVAILABLE
的值。
如果下列 Netcat 命令 (nc
) 成功,您可以從您登入的EC2執行個體或其他系統存取代理端點。如果您不在與代理和關聯資料庫VPC相同的 中,此命令會報告失敗。您或許可以直接登入資料庫,而不必位於相同的 中VPC。不過,除非您位於相同的 ,否則無法登入代理VPC。
nc -zx
MySQL_proxy_endpoint
3306 nc -zxPostgreSQL_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
編碼為包含 username
和 password
欄位的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 限制了與資料庫代理的一些連線 |
建立新代理或連線至代理時,可能會遇到下列問題。
錯誤 | 原因或因應措施 |
---|---|
|
選取現有IAM角色,而不是選擇建立新的角色。 |
連線至 MySQL Proxy 時,您可能會遇到下列問題。
錯誤 | 原因或因應措施 |
---|---|
ERROR 1040 (HY000): Connections rate limit exceeded (
|
從用戶端到代理的連線要求速率已超過限制。 |
ERROR 1040 (HY000): IAM authentication rate limit exceeded
|
從用戶端到代理進行IAM身分驗證的同時請求數量已超過限制。 |
ERROR 1040 (HY000): Number simultaneous connections exceeded (
|
從用戶端到代理的同時連線要求數目超過限制。 |
|
代理使用的 Secrets Manager 私密不符合現有資料庫使用者的使用者名稱和密碼。更新 Secrets Manager 私密中的登入資料,或確認資料庫使用者存在,且具有與私密中相同的密碼。 |
ERROR 1105 (HY000): Unknown error
|
發生未知的錯誤。 |
ERROR 1231 (42000): Variable ''character_set_client'' can't be set to the value of
|
為 |
ERROR 3159 (HY000): This RDS Proxy requires TLS connections.
|
您已在代理中啟用設定需要 Transport Layer Security,但您的連線包含 MySQL Client
|
ERROR 2026 (HY000): SSL connection error: Internal Server
|
代理的TLS交握失敗。一些可能的原因包括:
|
ERROR 9501 (HY000): Timed-out waiting to acquire database connection
|
代理等候取得資料庫連線逾時。一些可能的原因包括:
|
連線至 PostgreSQL 代理時,您可能會遇到下列問題。
錯誤 | 原因 | 解決方案 |
---|---|---|
|
使用者嘗試使用 PostgreSQL 用戶端 |
使用者需要使用 PostgreSQL 用戶端 |
|
這個角色沒有 Secrets Manager 秘密 |
新增此角色的 Secrets Manager 秘密。如需詳細資訊,請參閱設定 RDS Proxy 的 AWS Identity and Access Management (IAM) 政策。 |
|
用來連線到代理的資料庫用戶端正在使用代理目前不支援的身分驗證機制。 |
如果您不使用IAM身分驗證,請使用 MD5或 SCRAM 密碼身分驗證。 |
|
嘗試建立連線時,用來連線至 Proxy 的資料庫用戶端並未傳送使用者名稱。 |
使用您選擇的 PostgreSQL 用戶端設定代理的連線時,請務必定義使用者名稱。 |
|
用戶端嘗試使用IAM身分驗證進行連線,但未SSL啟用。 |
在 PostgreSQL 用戶端SSL中啟用 。 |
|
使用者已啟用 選項,需要 Transport Layer Security,但嘗試在 PostgreSQL 用戶端 |
若要修正此錯誤,請執行下列其中一項操作:
|
|
此錯誤可能由下列原因造成:
|
若要修正此錯誤,請執行下列動作:
|
|
此角色的密碼與 Secrets Manager 密碼不符。 |
在 Secrets Manager 中檢查此角色的秘密,看看密碼是否與 PostgreSQL 用戶端中使用的密碼相同。 |
|
用於IAM身分驗證的IAM權杖發生問題。 |
產生一個新的身分驗證符記,並在新的連線中加以使用。 |
|
用於連線至代理的 PostgreSQL 用戶端使用 3.0 之前的通訊協定。 |
使用支援 3.0 訊息通訊協定的較新 PostgreSQL 用戶端。如果您使用的是 PostgreSQL |
|
用於連線至代理的 PostgreSQL 用戶端正在嘗試使用串流複寫模式,而 RDS Proxy 目前不支援此模式。 |
在用於連線的 PostgreSQL 用戶端中關閉串流複寫模式。 |
|
透過啟動訊息,用於連線至代理的 PostgreSQL 用戶端正在請求RDS代理目前不支援的選項。 |
在用於連線的 PostgreSQL 用戶端中,關閉上述訊息中不支援顯示為 的選項。 |
|
從用戶端到代理進行IAM身分驗證的同時請求數量已超過限制。 |
降低使用 PostgreSQL 用戶端身分IAM驗證建立連線的速率。 |
|
從用戶端到代理的同時連線要求數目超過限制。 |
減少從 PostgreSQL 用戶端到此RDS代理的作用中連線數。 |
|
從用戶端到代理的連線要求速率已超過限制。 |
降低從 PostgreSQL 用戶端建立連線的速率。 |
|
發生未知的錯誤。 |
聯絡 AWS Support 以調查問題。 |
|
代理等候取得資料庫連線逾時。一些可能的原因包括:
|
可能的解決方案如下:
|
|
從 Proxy 建立的資料庫連線傳回錯誤。 |
解決方案取決於特定的資料庫錯誤。其中一個範例為 |