本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Aurora 故障診斷
下列各節可幫助您對 Amazon RDS 和 Amazon Aurora 資料庫執行個體的問題進行故障診斷。
主題
如需使用 Amazon RDS API 偵錯問題的相關資訊,請參閱對 Aurora 上的應用程式進行故障診斷。
無法連線至 Amazon RDS 資料庫執行個體
無法連線至資料庫執行個體時,下列是常見的原因:
-
傳入規則 – 您的本機防火牆強制執行的存取規則,與您獲授權可存取資料庫執行個體的 IP 地址可能不符。問題很可能在於安全群組中的傳入規則。
預設情況下,資料庫執行個體不允許存取。存取是透過與 VPC 相關聯的安全群組授予,該群組允許可傳入和傳出資料庫執行個體的流量。如有必要,請將特定情況的傳入和傳出規則新增至安全群組。您可以指定 IP 地址、IP 地址範圍,或其他 VPC 安全群組。
注意
新增傳入規則時,您可以針對 Source (來源) 選擇 My IP (我的 IP),以允許從瀏覽器中偵測到的 IP 位址存取資料庫執行個體。
如需設定安全群組的詳細資訊,請參閱建立安全群組以存取 VPC 中的資料庫叢集。
注意
不允許從 169.254.0.0/16 範圍內的 IP 地址連線的用戶端。這是「自動私有 IP 定址範圍」(APIPA),它用於本機連結定址。
-
公開存取性– 若要從 VPC 外部連線至資料庫執行個體 (例如,使用用戶端應用程式),則執行個體必須具有指派給它的公用 IP 位址。
若要讓執行個體可供公開存取,請修改並選擇 Public accessibility (公開存取性) 下方的 Yes (是)。如需詳細資訊,請參閱在 VPC 中的網際網路中隱藏資料庫叢集。
-
連接埠:由於本機防火牆限制,建立資料庫執行個體時指定的連接埠無法用來傳送或接收通訊。若要判斷您的網路是否允許將指定的連線埠用於傳入和傳出通訊,請洽詢網路管理員。
-
Availability (可用性) – 對於新建立的資料庫執行個體,資料庫執行個體的狀態為
creating,直到資料庫執行個體可供使用為止。狀態變更為available時,您便能連線至資料庫執行個體。根據資料庫執行個體的大小,可能需要最多 20 分鐘的時間,執行個體才會可用。 -
網際網路閘道 – 若要開放公開存取資料庫執行個體,其資料庫子網路群組中的子網路必須具備網際網路閘道。
設定子網路的網際網路閘道
登入 AWS 管理主控台 ,並在 https://console.aws.amazon.com/rds/
:// 開啟 Amazon RDS 主控台。 -
在導覽窗格中,選擇 Databases (資料庫),然後選擇資料庫執行個體的名稱。
-
在 Connectivity & security (連線能力和安全性) 標籤中,寫下 VPC 下的 VPC ID,以及 Subnets (子網路) 下的子網路 ID。
在 https://console.aws.amazon.com/vpc/
開啟 Amazon VPC 主控台。 -
在導覽窗格中,選擇 Internet Gateways (網際網路閘道)。請確認已經有網際網路閘道連結到 VPC。否則,請選擇 Create Internet Gateway (建立網際網路閘道),來建立網際網路閘道。選取網際網路閘道,然後選取 Attach to VPC (連結至 VPC),接著遵循指示,來將此閘道連結至 VPC。
-
在導覽窗格中,選取 Subnets (子網),然後選取子網。
-
在 Route Table (路由表) 索引標籤中,確認有包含
0.0.0.0/0的路由做為目的地,以及有 VPC 的網際網路閘道做為目標。如果您是使用其 IPv6 地址來連線到執行個體,請確認有針對所有 IPv6 流量 (
::/0) 的路由,來指向網際網路閘道。若否,請執行下列操作:-
選擇路由表 ID (rtb-xxxxxxxx) 以導覽至路由表。
-
在 Routes (路由) 標籤中,選擇 Edit routes (編輯路由)。選擇 Add route (新增路由),使用
0.0.0.0/0做為目的地,並以網際網路閘道為目標。若是 IPv6,請選擇 Add route (新增路由),使用
::/0做為目的地,並以網際網路閘道為目標。 -
選擇 Save routes (儲存路由)。
此外,若要嘗試連線至 IPv6 端點,請確保用戶端 IPv6 地址範圍有權連線至資料庫執行個體。
-
如需詳細資訊,請參閱在 VPC 中使用資料庫叢集。
測試資料庫執行個體的連線
您可以使用通用的 Linux 或 Microsoft Windows 工具來測試您對資料庫執行個體的連線。
您可以從 Linux 或 Unix 終端機測試連線,方法是輸入下列命令。將 取代為端點並將 DB-instance-endpoint 取代為資料庫執行個體的連線埠。port
nc -zvDB-instance-endpointport
例如,下列示範範例命令和傳回值:
nc -zv postgresql1.c6c8mn7fake0.us-west-2.rds.amazonaws.com 8299 Connection to postgresql1.c6c8mn7fake0.us-west-2.rds.amazonaws.com 8299 port [tcp/vvr-data] succeeded!
Windows 使用者可以使用 Telnet 來測試對資料庫執行個體的連線。Telnet 動作僅支援用於測試連線。如果連線成功,動作不會傳回訊息。如果連線不成功,您會收到類似如下的錯誤訊息:
C:\>telnet sg-postgresql1.c6c8mntfake0.us-west-2.rds.amazonaws.com 819 Connecting To sg-postgresql1.c6c8mntfake0.us-west-2.rds.amazonaws.com...Could not open connection to the host, on port 819: Connect failed
如果 Telnet 動作成功傳回,您的安全群組即已正確設定。
注意
Amazon RDS 不接受網際網路控制訊息通訊協定 (ICMP) 流量,包括 ping。
對連線身分驗證進行故障診斷
在某些情況下,您可以連線至資料庫執行個體,但會收到身分驗證錯誤。在這些情況下,您可能會重設資料庫執行個體的主要使用者密碼。請修改 RDS 執行個體,以便執行此動作。
Amazon RDS 安全問題
為了避免安全問題,請勿將您的 AWS 帳戶 根使用者電子郵件地址和密碼用於使用者帳戶。最佳實務是使用您的根使用者來建立使用者,並將那些使用者指派給資料庫使用者帳戶。如果必要,也可以使用您的根使用者來建立其他使用者帳戶。
如需建立使用者的相關資訊,請參閱在您的 AWS 帳戶中建立 IAM 使用者。如需在 中建立使用者的資訊 AWS IAM Identity Center,請參閱在 IAM Identity Center 中管理身分。
錯誤訊息「無法擷取帳戶屬性,某些主控台功能可能受損。」
您可以基於數個原因而收到此錯誤。這可能是因為您的帳戶缺少權限,或是您的帳戶並未適當設定。如果您的帳戶是新帳戶,您可能就不需等待帳戶就緒。如果這是現有的帳戶,您的存取政策中可能缺乏許可,因此無法執行某些動作 (例如建立資料庫執行個體)。若要修正問題,您的管理員需要為您的帳戶提供必要角色。如需詳細資訊,請參閱 IAM 文件。
重新設定資料庫執行個體擁有者密碼
如果您遭到鎖定資料庫 叢集,則可以用主要使用者身分登入。然後,您可以重設其他系統管理使用者或角色的認證。如果您無法以主要使用者身分登入, AWS 帳戶擁有者可以重設主要使用者密碼。如需您可能需要重設哪些管理帳戶或角色的詳細資訊,請參閱主要使用者帳戶權限。
您可以使用 Amazon RDS 主控台、 AWS CLI 命令 modify-db-instance,或使用 ModifyDBInstance API 操作來變更資料庫執行個體密碼。如需在資料庫叢集中修改資料庫執行個體的詳細資訊,請參閱修改資料庫叢集中的資料庫執行個體。
Amazon RDS 資料庫執行個體停機或重新開機
重新啟動資料庫執行個體時,可能會發生資料庫執行個體當機。當資料庫執行個體進入防止受到存取的狀態,以及當資料庫重新啟動時,均可能發生當機。在您手動將資料庫執行個體重新開機時,就會重新開機。當您變更需要重新開機才會生效的資料庫執行個體設定時,也會發生重新開機。
當您變更需要重新開機才會生效的設定,或當您手動進行重新開機時,才會發生資料庫執行個體重新開機。如果您變更設定並要求該變更立即生效,即會立即發生重新開機。或者,它會在資料庫執行個體的維護時段期間發生。
發生下列其中一個動作時,資料庫執行個體會立即重新開機:
-
您將資料庫執行個體的備份保留期間從 0 變更為非零值,或從非零值變更為 0。然後將 Apply Immediately (立即套用) 設為
true。 -
您變更資料庫執行個體類別,並且將 Apply Immediately (立即套用) 設為
true。
發生下列其中一個動作時,維護時段期間會發生資料庫執行個體重新開機:
-
您將資料庫執行個體的備份保留期間從 0 變更為非零值,或從非零值變更為 0,並且將 Apply Immediately (立即套用) 設為
false。 -
您變更資料庫執行個體類別,並且將 Apply Immediately (立即套用) 設為
false。
變更資料庫參數群組中的靜態參數時,在與參數群組相關聯的資料庫執行個體重新開機之後,變更才會生效。變更需要手動重新開機。在維護時段期間,不會自動重新啟動資料庫執行個體。
Amazon RDS 資料庫參數變更未生效
在某些情況下,您可能會變更資料庫參數群組中的參數,但不會看到變更生效。若是如此,您可能需要重新啟動與 DB 參數群組關聯的資料庫執行個體。當您變更動態參數時,變更會立即生效。當您變更靜態參數時,在您重新啟動與參數群組關聯的資料庫實體之前,變更將不會生效。
您可以使用 RDS 主控台重新啟動資料庫執行個體。或者,您可以明確呼叫 RebootDBInstance API 操作。如果資料庫執行個體處於多可用區部署中,即可重新啟動,而不需容錯移轉。若在變更靜態參數之後,要求重新啟動相關聯的資料庫執行個體,將有助於降低參數組態錯誤影響 API 呼叫的風險。其中一個例子是呼叫 ModifyDBInstance 變更資料庫執行個體類別。如需詳細資訊,請參閱修改 Amazon Aurora 中的資料庫參數群組中的參數。
Amazon Aurora 中的可用記憶體問題
可用記憶體是資料庫執行個體上可供資料庫引擎使用的隨機存取記憶體 (RAM) 總計。它是可用作業系統 (OS) 記憶體與可用緩衝區和頁面快取記憶體的總和。資料庫引擎使用主機上大多數的記憶體,但作業系統處理程序也使用一些 RAM。目前配置給資料庫引擎或作業系統處理程序目前所使用的記憶體不包括在可用記憶體中。當資料庫引擎記憶體不足時,資料庫執行個體會使用一般用於緩衝和快取的暫時空間。如前所述,此暫時空間包括在可用記憶體中。
您可以在 Amazon CloudWatch 中使用 FreeableMemory 指標以監控可用記憶體。如需詳細資訊,請參閱Amazon Aurora 的監控工具。
如果資料庫執行個體在可用記憶體方面持續不足或使用交換空間,請考慮縱向擴展為更大的資料庫執行個體類別。如需詳細資訊,請參閱Amazon Aurora 資料庫執行個體類別。
您也可以變更記憶體設定。例如,在 Aurora MySQL ,您可以調整 innodb_buffer_pool_size 參數的大小。依預設,此參數設定為實體記憶體的 75%。如需更多 MySQL 的疑難排解秘訣,請參閱如何疑難排解 Amazon RDS for MySQL 資料庫中可用記憶體不足的問題?
對於 Aurora serverless,FreeableMemory 表示當 Aurora serverless 資料庫執行個體擴展至其最大容量時,可用的未使用記憶體量。您可能已將執行個體縮小到相對較低的容量,但它仍然報告 FreeableMemory 的值很高,因為執行個體會擴展。這個記憶體目前不可用,但如果需要,您可以使其可供使用。
對於目前容量低於最大容量的每個 Aurora 容量單位 (ACU),FreeableMemory 增加約 2 GiB。因此,在資料庫執行個體盡可能向上擴展之前,該指標不會接近零。
若此指標接近 0 值,則資料庫執行個體已盡可能地縱向擴展。它即將接近其可用記憶體的限制。考慮增加叢集的最大 ACU 設定。若此指標在讀取器資料庫執行個體上接近 0 的值,請考慮將其他讀取器資料庫執行個體新增至叢集。如此,工作負載的唯讀部分可分佈於更多資料庫執行個體上,進而減少每個讀取器資料庫執行個體上的記憶體用量。如需詳細資訊,請參閱Aurora serverless 的重要 Amazon CloudWatch 指標。
Amazon Aurora MySQL 複寫問題
某些 MySQL 複寫問題也適用於 Aurora MySQL。您能夠診斷這些問題,並加以修正。
診斷和解決僅供讀取複本之間的延遲
建立 MySQL 僅供讀取複本且僅供讀取複本可供使用之後,Amazon RDS 會先複寫從開始僅供讀取複本建立操作起始起,對來源資料庫執行個體進行的變更。在此階段期間,僅供讀取複本的複寫延遲時間將大於 0。您可以在 Amazon CloudWatch 中檢視 Amazon RDS AuroraBinlogReplicaLag 指標,進而監控此延遲時間。
該 AuroraBinlogReplicaLag 指標回報 MySQL Seconds_Behind_Master 命令的 SHOW
REPLICA STATUS 欄位值。如需詳細資訊,請參閱 MySQL 文件中的 SHOW REPLICA STATUS 陳述式
當 AuroraBinlogReplicaLag 指標到達 0,複本即已跟上來源資料庫執行個體。如果 AuroraBinlogReplicaLag 指標傳回 -1,複寫可能為非作用中。若要對複寫錯誤進行故障診斷,請參閱 診斷和解決 MySQL 讀取複寫失敗。如果 AuroraBinlogReplicaLag 的值為 -1,也可能表示系統無法判斷 Seconds_Behind_Master 值,或該值為 NULL。
注意
Aurora MySQL 以前的版本使用 SHOW SLAVE STATUS 而不是 SHOW REPLICA STATUS。如果您使用的是 Aurora MySQL 第 1 版或第 2 版,請使用 SHOW SLAVE STATUS。將 SHOW REPLICA STATUS 用於 Aurora MySQL 第 3 版及更新版本。
在網路中斷期間,或在維護時段套用修補程式時, AuroraBinlogReplicaLag 指標即會傳回 -1。在這種情況下,請等候系統還原網路連線,或是等待維護時段結束,隨後再重新檢查 AuroraBinlogReplicaLag 指標。
MySQL 讀取複製技術是非同步的。因此您可以預期來源資料庫執行個體的 BinLogDiskUsage 指標與僅供讀取複本上的 AuroraBinlogReplicaLag 指標偶爾會增加。例如,請考慮一個情況,其中來源資料庫執行個體可同時出現大量寫入操作。同時,會使用單一輸入/輸出執行緒,對僅供讀取複本的寫入操作進行序列化。這種情況可能會導致來源執行個體和僅供讀取複本之間發生延遲。
如需僅供讀取複本和 MySQL 的詳細資訊,請參閱 MySQL 文件中的複寫實作詳細資訊
您可以利用執行下列動作,減少對來源資料庫執行個體的更新與對僅供讀取複本的後續更新之間的延遲:
-
將僅供讀取複本的資料庫執行個體類別設定為與來源資料庫執行個體具有相等的儲存體大小。
-
確保來源資料庫執行個體和僅供讀取複本所使用的資料庫參數群組中的參數設定相容。如需詳細資訊和範例,請參閱下一節中
max_allowed_packet參數的討論。 -
停用查詢快取。針對經常修改的資料表,因為快取已遭鎖定並且經常重新整理,使用查詢快取可能會增加複本延遲。若是這種情況,如果停用查詢快取,您可能會發現複本延遲較少。您可以在資料庫執行個體的資料庫參數群組中將
query_cache_type parameter設定為 0,以停用查詢快取。如需查詢快取的詳細資訊,請參閱查詢快取組態。 -
為 MySQL 的緩衝區集區。如果您有經常更新的一組小型資料表,並且使用 InnoDB 或 XtraDB 資料表結構描述。在這種情況下,傾印僅供讀取複本上的那些資料表。這麼做會造成資料庫引擎掃描來自磁碟之那些資料表的資料列,然後將它們快取在緩衝集區中。如此可減少複本延遲。下列顯示一個範例。
對於 Linux、macOS 或 Unix:
PROMPT> mysqldump \ -h<endpoint>\ --port=<port>\ -u=<username>\ -p<password>\ database_nametable1 table2> /dev/null在 Windows 中:
PROMPT> mysqldump ^ -h<endpoint>^ --port=<port>^ -u=<username>^ -p<password>^ database_nametable1 table2> /dev/null
診斷和解決 MySQL 讀取複寫失敗
Amazon RDS 會監控僅供讀取複本的複寫狀態。如果複寫因任何原因停止,RDS 會將僅供讀取複本執行個體的 Replication State (複寫狀態) 欄位更新為 Error。您可以透過檢視 Replication Error (複寫錯誤) 欄位,檢閱 MySQL 引擎擲出之相關聯錯誤的詳細資訊。也會產生指出僅供讀取複本之狀態的事件,包括 RDS-EVENT-0045、RDS-EVENT-0046 和 RDS-EVENT-0057。如需事件和訂閱事件的詳細資訊,請參閱使用 Amazon RDS 事件通知。如果傳回 MySQL 錯誤訊息,請在 MySQL 錯誤訊息文件
可能造成複寫錯誤的常見情況包括下列:
-
僅供讀取複本之
max_allowed_packet參數的值小於來源資料庫執行個體之max_allowed_packet參數的值。max_allowed_packet參數是您可以在資料庫參數群組中設定的自訂參數。max_allowed_packet參數可用來指定可在資料庫上執行的資料處理語言 (DML) 大小上限。在某些情況下,來源資料庫執行個體的max_allowed_packet值可能大於僅供讀取複本的max_allowed_packet值。若是如此,複寫程序會擲回錯誤並停止複寫。最常見的錯誤為packet bigger than 'max_allowed_packet' bytes。您可以透過讓來源和僅供讀取複本使用具有相同max_allowed_packet參數值的資料庫參數群組,藉此修正錯誤。 -
寫入僅供讀取複本上的資料表。如果您在僅供讀取複本上建立索引,您需要將
read_only參數設為 0 才能建立索引。如果您要寫入僅供讀取複本上的資料表,可能中斷複寫。 -
使用非交易儲存引擎 (例如 MyISAM)。僅供讀取複本需要交易儲存引擎。複寫只支持以下儲存引擎:MySQL 或 MariaDB 的 InnoDB。
您可以使用下列命令,將 MyISAM 資料表轉換為 InnoDB:
alter table <schema>.<table_name> engine=innodb; -
使用不安全的非確定性查詢 (例如
SYSDATE())。如需詳細資訊,請參閱 MySQL 文件中的二進位日誌記錄中安全和不安全陳述式的判定。
下列步驟有助於解決您的複寫錯誤:
-
如果發生邏輯錯誤,則可遵循略過目前複寫錯誤中所述的步驟,放心地略過此錯誤。您的 Aurora MySQL 資料庫執行個體必須執行包含
mysql_rds_skip_repl_error程序的版本。如需詳細資訊,請參閱 mysql_rds_skip_repl_error。 -
如果遇到二進位日誌 (binlog) 位置問題,您可以變更複本重播位置。對於 Aurora MySQL 第 1 版和第 2 版,您可以使用
mysql.rds_next_master_log命令執行此動作。對於 Aurora MySQL 第 3 版和更高版本,您可以使用mysql.rds_next_source_log命令執行此動作。您的 Aurora MySQL 資料庫執行個體必須執行支援此命令的版本,才能變更複本重播位置。如需版本資訊,請參閱 mysql_rds_next_master_log。 -
如果由於 DML 負載過高而遇到暫時的效能問題,您可以在僅供讀取複本上的資料庫參數群組中將
innodb_flush_log_at_trx_commit參數設定為 2。這麼做有助於僅供讀取複本跟上,不過會暫時減少不可分割性、一致性、隔離和耐用性 (ACID)。 -
您可以刪除僅供讀取複本,並使用相同的資料庫執行個體識別符來建立執行個體。如此一來,端點仍會與舊的僅供讀取複本相同。
如果複寫錯誤已修復,Replication State (複寫狀態) 會變更為 replicating (複寫中)。如需詳細資訊,請參閱故障診斷 MySQL 僅供讀取複本的問題。
複寫已停止錯誤
當您呼叫 mysql.rds_skip_repl_error 命令時,可能會收到錯誤訊息,指出複寫已關閉或停用。
因為複寫已停止且無法重新啟動,因此出現此錯誤訊息。
如果您需要略過大量錯誤,複寫延遲可能增加至超出二進位記錄檔的預設保留期間。在此情況下,由於在清除二進位日誌檔之前已在複本上重播該檔案,您可能會遇到嚴重錯誤。此清除動作會導致複寫停止,而您將無法再呼叫 mysql.rds_skip_repl_error 命令來略過複寫錯誤。
透過增加二進位記錄檔在複寫主控端上保留的小時數,即可以減輕此問題。在延長二進位記錄檔保留時間之後,您可以重新啟動複寫,並視需要呼叫 mysql.rds_skip_repl_error 命令。
若要設定 binlog 保留時間,請使用 mysql_rds_set_configuration 程序。並指定 'binlog retention hours' 組態參數,以及資料庫叢集上保留二進位記錄檔的時數 (最多 2160 小時 (90 天))。Aurora MySQL 的預設值為 24 小時 (1 天)。下列範例會將 binlog 檔案的保留期間設定為 48 小時。
CALL mysql.rds_set_configuration('binlog retention hours', 48);
僅供讀取複本複寫無法初始化中繼資料結構
嘗試開始複寫時,您收到下列錯誤訊息:
Read Replica Replication Error - SQLError: 13124, reason: Replica failed to initialize applier metadata structure from the repository
當複本的中繼資料結構發生問題時,就會發生此錯誤。若要修正中繼資料結構,您必須建立新的複本。
若要防止未來發生這種情況,請執行下列其中一個動作:
-
如果可能,請在複本停用多執行緒。從 MySQL 8.0.27 開始,預設會啟用多執行緒。
-
如果您需要在複本使用多執行緒,我們建議您使用 GTID 式複寫。如需詳細資訊,請參閱使用 GTID 式複寫。