本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 從網際網路隱藏 中的資料庫叢集。
-
Port (連線埠) – 由於您的本機防火牆限制,建立資料庫執行個體時指定的連線埠無法用來傳送或接收通訊。若要判斷您的網路是否允許將指定的連線埠用於傳入和傳出通訊,請洽詢網路管理員。
-
Availability (可用性) – 對於新建立的資料庫執行個體,資料庫執行個體的狀態為
creating
,直到資料庫執行個體可供使用為止。狀態變更為available
時,您便能連線至資料庫執行個體。根據資料庫執行個體的大小,可能需要最多 20 分鐘的時間,執行個體才會可用。 -
網際網路閘道 – 若要開放公開存取資料庫執行個體,其資料庫子網路群組中的子網路必須具備網際網路閘道。
設定子網路的網際網路閘道
登入 AWS Management Console 並在 開啟 Amazon RDS主控台https://console.aws.amazon.com/rds/
。 -
在導覽窗格中,選擇 Databases (資料庫),然後選擇資料庫執行個體的名稱。
-
在連線與安全索引標籤中,寫下 下的 VPC ID 值VPC和子網路 下的子網路 ID。
在 開啟 Amazon VPC主控台https://console.aws.amazon.com/vpc/
。 -
在導覽窗格中,選擇 Internet Gateways (網際網路閘道)。確認您的 已連接網際網路閘道VPC。否則,請選擇 Create Internet Gateway (建立網際網路閘道),來建立網際網路閘道。選取網際網路閘道,然後選擇連接至 VPC ,然後遵循指示將其連接至您的 VPC。
-
在導覽窗格中,選取 Subnets (子網),然後選取子網。
-
在路由表索引標籤上,驗證您的
0.0.0.0/0
作為VPC目標的目的地和網際網路閘道是否有路由。如果您使用執行個體IPv6的地址連線到執行個體,請確認所有IPv6流量 (
::/0
) 都有指向網際網路閘道的路由。若否,請執行下列操作:-
選擇路由表 ID (rtb-xxxxxxxx) 以導覽至路由表。
-
在 Routes (路由) 標籤中,選擇 Edit routes (編輯路由)。選擇 Add route (新增路由),使用
0.0.0.0/0
做為目的地,並以網際網路閘道為目標。對於 IPv6,選擇新增路由 ,使用
::/0
作為目的地,而網際網路閘道 作為目標。 -
選擇 Save routes (儲存路由)。
此外,如果您嘗試連線至IPv6端點,請確定用戶端IPv6地址範圍已獲授權可連線至資料庫執行個體。
-
如需詳細資訊,請參閱在 中使用資料庫叢集 VPC。
測試資料庫執行個體的連線
您可以使用通用的 Linux 或 Microsoft Windows 工具來測試您對資料庫執行個體的連線。
您可以從 Linux 或 Unix 終端機測試連線,方法是輸入下列命令。將
取代為端點並將 DB-instance-endpoint
取代為資料庫執行個體的連線埠。port
nc -zv
DB-instance-endpoint
port
例如,下列示範範例命令和傳回值:
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 帳戶 根使用者電子郵件地址和密碼用於使用者帳戶。最佳實務是使用您的根使用者來建立使用者,並將使用者指派給資料庫使用者帳戶。如有必要,您也可以使用根使用者來建立其他使用者帳戶。
如需建立使用者的相關資訊,請參閱在 中建立IAM使用者 AWS 帳戶。如需在 中建立使用者的相關資訊 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
變更資料庫執行個體類別。如需詳細資訊,請參閱修改 Aurora 數據庫參數組中的參數。
Amazon Aurora中的可用記憶體問題
可用記憶體是資料庫執行個體上可供資料庫引擎使用的總隨機存取記憶體 (RAM)。它是可用作業系統 (OS) 記憶體與可用緩衝區和頁面快取記憶體的總和。資料庫引擎會使用主機上的大部分記憶體,但作業系統程序也會使用部分 RAM。目前配置給資料庫引擎或作業系統處理程序目前所使用的記憶體不包括在可用記憶體中。當資料庫引擎記憶體不足時,資料庫執行個體會使用一般用於緩衝和快取的暫時空間。如前所述,此暫時空間包括在可用記憶體中。
您可以使用 Amazon 中的 FreeableMemory
指標 CloudWatch 來監控可用記憶體。如需詳細資訊,請參閱極光的監控工具。
如果資料庫執行個體在可用記憶體方面持續不足或使用交換空間,請考慮縱向擴展為更大的資料庫執行個體類別。如需詳細資訊,請參閱Amazon Aurora 數據庫實例類。
您也可以變更記憶體設定。例如,在 Aurora MySQL 上,您可以調整 innodb_buffer_pool_size
參數的大小。依預設,此參數設定為實體記憶體的 75%。如需更多我的SQL疑難排解秘訣,請參閱如何對 Amazon RDS for MySQL 資料庫中的低可用記憶體進行疑難排解?
用於 Aurora Serverless v2,FreeableMemory
表示當 時,未使用的記憶體數量 Aurora Serverless v2 資料庫執行個體會擴展至其最大容量。您可能已將執行個體縮小到相對較低的容量,但它仍然報告 FreeableMemory
的值很高,因為執行個體會擴展。這個記憶體目前不可用,但如果需要,您可以使其可供使用。
對於目前容量低於最大容量的每個 Aurora 容量單位 (ACU), FreeableMemory
會增加約 2 GiB 因此,在資料庫執行個體盡可能向上擴展之前,該指標不會接近零。
若此指標接近 0
值,則資料庫執行個體已盡可能地縱向擴展。它即將接近其可用記憶體的限制。考慮增加叢集的最大ACU設定。若此指標在讀取器資料庫執行個體上接近 0
的值,請考慮將其他讀取器資料庫執行個體新增至叢集。如此,工作負載的唯讀部分可分佈於更多資料庫執行個體上,進而減少每個讀取器資料庫執行個體上的記憶體用量。如需詳細資訊,請參閱的重要 Amazon CloudWatch 指標 Aurora Serverless v2。
用於 Aurora Serverless v1,您可以將容量範圍變更為使用更多 ACUs。如需詳細資訊,請參閱修改 Aurora Serverless v1 資料庫叢集。
Amazon Aurora MySQL 複寫問題
某些我的SQL複寫問題也適用於 Aurora My SQL。您能夠診斷這些問題,並加以修正。
診斷和解決僅供讀取複本之間的延遲
在您建立 My SQL 僅供讀取複本且複本可供使用之後,Amazon 會RDS先複寫從僅供讀取複本建立操作開始起對來源資料庫執行個體所做的變更。在此階段期間,僅供讀取複本的複寫延遲時間將大於 0。您可以檢視 Amazon RDSAuroraBinlogReplicaLag
指標 CloudWatch ,在 Amazon 中監控此延遲時間。
指標會報告 My AuroraBinlogReplicaLag
SQL SHOW REPLICA STATUS
命令Seconds_Behind_Master
欄位的值。如需詳細資訊,請參閱我的SQL文件中的SHOWREPLICASTATUS陳述
當 AuroraBinlogReplicaLag
指標到達 0,複本即已跟上來源資料庫執行個體。如果 AuroraBinlogReplicaLag
指標傳回 -1,複寫可能為非作用中。若要對複寫錯誤進行故障診斷,請參閱 診斷和解決 My SQL 讀取複寫失敗。如果 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
指標。
My SQL 讀取複寫技術是非同步的。因此您可以預期來源資料庫執行個體的 BinLogDiskUsage
指標與僅供讀取複本上的 AuroraBinlogReplicaLag
指標偶爾會增加。例如,請考慮一個情況,其中來源資料庫執行個體可同時出現大量寫入操作。同時,會使用單一輸入/輸出執行緒,對僅供讀取複本的寫入操作進行序列化。這種情況可能會導致來源執行個體和僅供讀取複本之間發生延遲。
如需有關僅供讀取複本和我的 的詳細資訊SQL,請參閱我的文件中的SQL複寫實作詳細資訊
您可以利用執行下列動作,減少對來源資料庫執行個體的更新與對僅供讀取複本的後續更新之間的延遲:
-
將僅供讀取複本的資料庫執行個體類別設定為與來源資料庫執行個體具有相等的儲存體大小。
-
確保來源資料庫執行個體和僅供讀取複本所使用的資料庫參數群組中的參數設定相容。如需詳細資訊和範例,請參閱下一節中
max_allowed_packet
參數的討論。 -
停用查詢快取。針對經常修改的資料表,因為快取已遭鎖定並且經常重新整理,使用查詢快取可能會增加複本延遲。若是這種情況,如果停用查詢快取,您可能會發現複本延遲較少。您可以在資料庫執行個體的資料庫參數群組中將
query_cache_type parameter
設定為 0,以停用查詢快取。如需查詢快取的詳細資訊,請參閱查詢快取組態。 -
對 InnoDB for My SQL的僅供讀取複本上的緩衝區集區進行暖化。如果您有經常更新的一組小型資料表,並且使用 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
診斷和解決 My SQL 讀取複寫失敗
Amazon 會RDS監控僅供讀取複本的複寫狀態。RDS Error
如果複寫因任何原因停止, 會將僅供讀取複本執行個體的複寫狀態欄位更新為 。您可以檢視複寫錯誤欄位,檢閱 My SQL 引擎擲回的相關錯誤詳細資訊。 也會產生指出僅供讀取複本之狀態的事件,包括 RDS-EVENT-0045、RDS-EVENT-0046 和 RDS-EVENT-0057。如需事件和訂閱事件的詳細資訊,請參閱使用 Amazon RDS 事件通知。如果傳回我的SQL錯誤訊息,請檢查我的SQL錯誤訊息文件 中的錯誤
可能造成複寫錯誤的常見情況包括下列:
-
僅供讀取複本之
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 才能建立索引。如果您要寫入僅供讀取複本上的資料表,可能中斷複寫。 -
使用非交易儲存引擎,例如 My ISAM。僅供讀取複本需要交易儲存引擎。只有下列儲存引擎支援複寫:InnoDB for MySQL 或 MariaDB 。
您可以使用下列命令將 MyISAM 資料表轉換為 InnoDB:
alter table <schema>.<table_name> engine=innodb;
-
使用不安全的非確定性查詢 (例如
SYSDATE()
)。如需詳細資訊,請參閱我的SQL文件中二進位記錄的安全和不安全陳述式判斷。
下列步驟有助於解決您的複寫錯誤:
-
如果發生邏輯錯誤,則可遵循略過目前複寫錯誤中所述的步驟,放心地略過此錯誤。您的 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 (複寫中)。如需詳細資訊,請參閱疑難排解我的SQL僅供讀取複本問題 。
複寫已停止錯誤
當您呼叫 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);