本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon 的故障診斷 RDS
使用下列各節來協助您疑難排解 Amazon RDS和 Amazon Aurora 中資料庫執行個體的問題。
主題
如需使用 Amazon RDS 偵錯問題的相關資訊API,請參閱 對 Amazon RDS 上的應用程式進行故障診斷。
無法連線至 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 資料庫執行個體。
Amazon RDS 安全問題
為了避免安全問題,切勿將 AWS 帳戶 根使用者電子郵件地址和密碼用於使用者帳戶。最佳實務是使用您的根使用者來建立使用者,並將使用者指派給資料庫使用者帳戶。如有必要,您也可以使用根使用者來建立其他使用者帳戶。
如需建立使用者的相關資訊,請參閱在 中建立IAM使用者 AWS 帳戶。如需在 中建立使用者的相關資訊 AWS IAM Identity Center,請參閱在 IAM Identity Center 中管理身分。
錯誤訊息「無法擷取帳戶屬性,某些主控台功能可能受損。」
您可以基於數個原因而收到此錯誤。這可能是因為您的帳戶缺少權限,或是您的帳戶並未適當設定。如果您的帳戶是新帳戶,您可能就不需等待帳戶就緒。如果這是現有的帳戶,您的存取政策中可能缺乏許可,因此無法執行某些動作 (例如建立資料庫執行個體)。若要修正問題,您的管理員需要為您的帳戶提供必要角色。如需詳細資訊,請參閱 IAM 文件 。
對不相容的網路狀態進行故障診斷
不相容的網路狀態,表示資料庫可能在資料庫層級仍可存取,但您無法修改或重新啟動它。
原因
資料庫執行個體的不相容網路狀態可能是下列其中一個動作所造成:
-
修改資料庫執行個體類別。
-
修改資料庫執行個體以使用多可用區域資料庫叢集部署。
-
因維護事件而更換主機。
-
啟動更換用資料庫執行個體。
-
從快照備份還原。
-
啟動之前已停止的資料庫執行個體。
解析度
使用start-db-instance 命令
若要修正處於不相容網路狀態的資料庫,請依照下列指示執行:
-
開啟 https://console.aws.amazon.com/rds/
,然後從導覽窗格中選擇資料庫。 -
選擇處於不相容網路狀態的資料庫執行個體,並從IDs連線與安全索引標籤記下資料庫執行個體識別符、VPCID 和子網路。
-
使用 AWS CLI 執行
start-db-instance
命令。指定--db-instance-identifier
值。注意
若在資料庫處於不相容模式時執行此命令,可能會造成短暫停機時間。
start-db-instance
命令無法解決RDS適用於 SQL Server 資料庫執行個體的此問題。
如果命令成功執行,您的資料庫狀態會變更為可用。
如果您的資料庫重新啟動,資料庫執行個體可能會執行在執行個體進入不相容網路狀態之前,於執行個體上執行的最後一項操作。這樣可能會讓執行個體再次進入不相容的網路狀態。
如果start-db-instance
命令失敗或執行個體移回不相容的網路狀態,請開啟RDS主控台中的資料庫頁面,然後選取資料庫。導覽至日誌與事件區段。最近的事件區段會顯示要採取的進一步解決步驟。訊息分類如下:
-
INTERNAL RESOURCE CHECK:您的內部資源可能會出現問題。
-
DNS CHECK:檢查VPC主控台VPC中 的DNS解析度和主機名稱。
-
ENI CHECK:資料庫的彈性網路介面 (ENI) 可能不存在。
-
GATEWAY CHECK:公開資料庫的網際網路閘道未連接至 VPC。
-
IP CHECK:子網路中沒有可用的 IP 地址。
-
SECURITY GROUP CHECK:沒有與您的資料庫相關聯的安全群組,或安全群組無效。
-
SUBNET CHECK:資料庫子網路群組中沒有有效的子網路,或者子網路有問題。
-
VPC CHECK:與您的資料庫VPC相關聯的 無效。
執行 point-in-time復原
最佳實務是擁有備份 (快照或邏輯),以免您的資料庫進入不相容的網路狀態。請參閱 備份簡介。如果您開啟自動備份,則暫時停止對資料庫的任何寫入, point-in-time並執行復原。
注意
在執行個體進入不相容的網路狀態後,可能無法存取資料庫執行個體來執行邏輯備份。
如果您未開啟自動備份,請建立新的資料庫執行個體。然後使用 AWS Database Migration Service (AWS DMS),或使用備份與還原工具來遷移資料。
如果這無法解決問題,請聯絡 AWS Support 以取得進一步協助。
重新設定資料庫執行個體擁有者密碼
如果您遭到鎖定資料庫 執行個體,則可以用主要使用者身分登入。然後,您可以重設其他系統管理使用者或角色的認證。如果您無法以主要使用者身分登入, AWS 帳戶擁有者可以重設主要使用者密碼。如需您可能需要重設哪些管理帳戶或角色的詳細資訊,請參閱主要使用者帳戶權限。
您可以使用 Amazon RDS主控台、 AWS CLI 命令 modify-db-instance或 ModifyDBInstance API操作來變更資料庫執行個體密碼。如需修改 資料庫執行個體的詳細資訊,請參閱修改 Amazon RDS 資料庫執行個體。
Amazon RDS 資料庫執行個體中斷或重新啟動
重新啟動資料庫執行個體時,可能會發生資料庫執行個體當機。當資料庫執行個體進入防止受到存取的狀態,以及當資料庫重新啟動時,均可能發生當機。在您手動將資料庫執行個體重新開機時,就會重新開機。當您變更需要重新開機才會生效的資料庫執行個體設定時,也會發生重新開機。
當您變更需要重新開機才會生效的設定,或當您手動進行重新開機時,才會發生資料庫執行個體重新開機。如果您變更設定並要求該變更立即生效,即會立即發生重新開機。或者,它會在資料庫執行個體的維護時段期間發生。
發生下列其中一個動作時,資料庫執行個體會立即重新開機:
-
您將資料庫執行個體的備份保留期間從 0 變更為非零值,或從非零值變更為 0。然後將 Apply Immediately (立即套用) 設為
true
。 -
您變更資料庫執行個體類別,並且將 Apply Immediately (立即套用) 設為
true
。 -
您可以將儲存類型從 Magnetic (標準) 變更為一般用途 (SSD) 或佈建 IOPS(SSD),或從佈建 IOPS(SSD) 或一般用途 (SSD) 變更為 Magnetic (標準)。
發生下列其中一個動作時,維護時段期間會發生資料庫執行個體重新開機:
-
您將資料庫執行個體的備份保留期間從 0 變更為非零值,或從非零值變更為 0,並且將 Apply Immediately (立即套用) 設為
false
。 -
您變更資料庫執行個體類別,並且將 Apply Immediately (立即套用) 設為
false
。
變更資料庫參數群組中的靜態參數時,在與參數群組相關聯的資料庫執行個體重新開機之後,變更才會生效。變更需要手動重新開機。在維護時段期間,不會自動重新啟動資料庫執行個體。
如需查看資料表,以了解資料庫執行個體動作與設定 Apply Immediately (立即套用) 值會產生的效果,請參閱修改 Amazon RDS 資料庫執行個體。
Amazon RDS 資料庫參數變更未生效
在某些情況下,您可能會變更資料庫參數群組中的參數,但不會看到變更生效。若是如此,您可能需要重新啟動與 DB 參數群組關聯的資料庫執行個體。當您變更動態參數時,變更會立即生效。當您變更靜態參數時,在您重新啟動與參數群組關聯的資料庫實體之前,變更將不會生效。
您可以使用RDS主控台重新啟動資料庫執行個體。或者您可以明確呼叫 RebootDBInstance
API操作。如果資料庫執行個體處於多可用區部署中,即可重新啟動,而不需容錯移轉。靜態參數變更後重新啟動相關資料庫執行個體的需求,有助於降低參數設定錯誤影響API呼叫的風險。其中一個例子是呼叫 ModifyDBInstance
變更資料庫執行個體類別。如需詳細資訊,請參閱修改 Amazon RDS Amazon 數據庫參數組中的參數。
Amazon RDS 資料庫執行個體的儲存空間不足
如果您的資料庫執行個體用盡儲存空間,將不再可用。強烈建議您持續監控 中發佈的FreeStorageSpace
指標, CloudWatch 以確保您的資料庫執行個體有足夠的可用儲存空間。
如果您的資料庫執行個體用盡儲存體,其狀態將變更為 storage-full
。例如,對已用完其儲存體之資料庫執行個體的 DescribeDBInstances
API操作呼叫會輸出下列項目。
aws rds describe-db-instances --db-instance-identifier
mydbinstance
DBINSTANCE mydbinstance 2009-12-22T23:06:11.915Z db.m5.large mysql8.0 50 sa storage-full mydbinstance.clla4j4jgyph.us-east-1.rds.amazonaws.com 3306 us-east-1b 3 SECGROUP default active PARAMGRP default.mysql8.0 in-sync
若要從此案例復原,請使用 ModifyDBInstance
API操作或下列 AWS CLI 命令,將更多儲存空間新增至執行個體。
用於 Linux, macOS,或 Unix:
aws rds modify-db-instance \ --db-instance-identifier
mydbinstance
\ --allocated-storage60
\ --apply-immediately
用於 Windows:
aws rds modify-db-instance ^ --db-instance-identifier
mydbinstance
^ --allocated-storage60
^ --apply-immediately
DBINSTANCE mydbinstance 2009-12-22T23:06:11.915Z db.m5.large mysql8.0 50 sa storage-full mydbinstance.clla4j4jgyph.us-east-1.rds.amazonaws.com 3306 us-east-1b 3 60 SECGROUP default active PARAMGRP default.mysql8.0 in-sync
現在,描述資料庫執行個體時,將會看到資料庫執行個體 modifying
狀態,這表示正在擴展儲存體。
aws rds describe-db-instances --db-instance-identifier
mydbinstance
DBINSTANCE mydbinstance 2009-12-22T23:06:11.915Z db.m5.large mysql8.0 50 sa modifying mydbinstance.clla4j4jgyph.us-east-1.rds.amazonaws.com 3306 us-east-1b 3 60 SECGROUP default active PARAMGRP default.mysql8.0 in-sync
一旦儲存體擴展完成,您的資料庫執行個體狀態將變更為 available
。
aws rds describe-db-instances --db-instance-identifier
mydbinstance
DBINSTANCE mydbinstance 2009-12-22T23:06:11.915Z db.m5.large mysql8.0 60 sa available mydbinstance.clla4j4jgyph.us-east-1.rds.amazonaws.com 3306 us-east-1b 3 SECGROUP default active PARAMGRP default.mysql8.0 in-sync
您可以使用 DescribeEvents
操作,在您的儲存空間用盡時收到通知。例如,在此案例中,如果您於這些操作之後執行 DescribeEvents
呼叫,將看到下列輸出:
aws rds describe-events --source-type
db-instance
--source-identifiermydbinstance
2009-12-22T23:44:14.374Z mydbinstance Allocated storage has been exhausted db-instance 2009-12-23T00:14:02.737Z mydbinstance Applying modification to allocated storage db-instance 2009-12-23T00:31:54.764Z mydbinstance Finished applying modification to allocated storage
Amazon 資料庫執行個體可用RDS不足
在嘗試建立、啟動或修改資料庫執行個體時,會傳回 InsufficientDBInstanceCapacity
錯誤。在嘗試從資料庫快照還原資料庫執行個體時,也會傳回錯誤。傳回此錯誤時,常見原因是無法在要求的可用區域中使用指定的資料庫執行個體類別。您可以嘗試以下其中一項來解決此問題:
-
使用不同的資料庫執行個體類別來重試此請求。
-
使用不同的可用區域來重試此請求。
-
重試該請求,但不指定明確的可用區域。
如需 Amazon 執行個體容量問題的疑難排解資訊EC2,請參閱 Amazon EC2使用者指南 中的執行個體容量不足。
如需修改資料庫執行個體的相關資訊,請參閱修改 Amazon RDS 資料庫執行個體。
Amazon RDS中的可用記憶體問題
可用記憶體是資料庫執行個體上可供資料庫引擎使用的總隨機存取記憶體 (RAM)。它是可用作業系統 (OS) 記憶體與可用緩衝區和頁面快取記憶體的總和。資料庫引擎會使用主機上的大部分記憶體,但作業系統程序也會使用部分 RAM。目前配置給資料庫引擎或作業系統處理程序目前所使用的記憶體不包括在可用記憶體中。當資料庫引擎記憶體不足時,資料庫執行個體會使用一般用於緩衝和快取的暫時空間。如前所述,此暫時空間包括在可用記憶體中。
您可以使用 Amazon 中的 FreeableMemory
指標 CloudWatch 來監控可用記憶體。如需詳細資訊,請參閱RDSAmazon的監控工具。
如果資料庫執行個體在可用記憶體方面持續不足或使用交換空間,請考慮縱向擴展為更大的資料庫執行個體類別。如需詳細資訊,請參閱 數據庫實例類。
您也可以變更記憶體設定。例如,在 RDS for My SQL上,您可以調整 innodb_buffer_pool_size
參數的大小。依預設,此參數設定為實體記憶體的 75%。如需更多我的SQL疑難排解秘訣,請參閱如何對 Amazon RDS for MySQL 資料庫中的低可用記憶體進行疑難排解?
MySQL 和 MariaDB 發出
您可以使用 MySQL 和 MariaDB 資料庫執行個體診斷和修正問題。
主題
My SQL和 MariaDB 連線上限
允許的 RDS for My SQL或 RDS for MariaDB 資料庫執行個體連線數目上限,取決於其資料庫執行個體類別可用的記憶體數量。資料庫執行個體可用的記憶體越多,可用的連線數就越多。如需資料庫執行個體類別的詳細資訊,請參閱 數據庫實例類。
依預設,資料庫執行個體的連線限制會設為資料庫執行個體類別的上限。您可以將並行連線數限制為任何值,最大為允許的連線數上限。使用資料庫執行個體中參數群組的 max_connections
參數。如需詳細資訊,請參閱 資料庫連線數上限 和 的參數組 RDS。
您可以執行下列查詢,以擷取 My SQL或 MariaDB 資料庫執行個體允許的連線數目上限。
SELECT @@max_connections;
您可以執行下列查詢,以擷取 My SQL或 MariaDB 資料庫執行個體的作用中連線數目。
SHOW STATUS WHERE `variable_name` = 'Threads_connected';
診斷和解決記憶體限制的不相容參數狀態
當符合下列條件時,可以將 MariaDB 或 MySQL 資料庫執行個體置於記憶體限制的不相容參數狀態:
-
當資料庫執行個體狀態為可用時,執行個體會在一小時內至少重新啟動三次,或在一天內至少重新啟動五次。
-
嘗試重新啟動資料庫執行個體失敗,因為維護動作或監控程序無法重新啟動資料庫執行個體。
-
資料庫執行個體的潛在記憶體用量超過配置給其資料庫執行個體類別的記憶體 1.2 倍。
當資料庫執行個體在一小時內第三次重新啟動時,或在一天內第五次重新啟動時,它會執行記憶體用量檢查。此檢查會計算資料庫執行個體的潛在記憶體用量。計算所傳回的值是下列值的總和:
-
值 1 – 下列參數的總和:
-
innodb_additional_mem_pool_size
-
innodb_buffer_pool_size
您可以修改 的值
innodb_buffer_pool_size
。不過,該值不一定符合您輸入的內容。發生此不相符的原因有幾個。首先,如果資料庫執行個體是微型資料庫執行個體,我們會覆寫預設值,並將其設定為 256 MB。如需詳細資訊,請參閱覆蓋緩衝池大小。其次,我們會確保在資料庫執行個體上保留 500 MB 的記憶體,以供主機管理員、引擎、作業系統和核心使用。
最後,我們將它分成 單位
innodb_buffer_pool_size
進行最佳化。主機管理員會四捨五入到這些單位中最接近的倍數。單位的計算方式是乘innodb_buffer_pool_chunk_size
以innodb_buffer_pool_instances
。如需詳細資訊,請參閱我的SQL文件中的設定 InnoDB 緩衝集區大小。 除非 小於
innodb_buffer_pool_instances
1 GB,否則 的預設值innodb_buffer_pool_size
為 8。如果innodb_buffer_pool_size
小於 1 GB,則 的預設值innodb_buffer_pool_instances
為 1。的預設值innodb_buffer_pool_chunk_size
為 128 MB。 -
innodb_log_buffer_size
-
key_buffer_size
-
query_cache_size
(僅限我的SQL 5.7 版) -
tmp_table_size
-
-
值 2 –
max_connections
參數乘以下參數的總和:-
binlog_cache_size
-
join_buffer_size
-
read_buffer_size
-
read_rnd_buffer_size
-
sort_buffer_size
-
thread_stack
-
-
值 3 – 如果已啟用
performance_schema
參數,請將max_connections
參數乘以429498
。如果停用
performance_schema
參數,則此值為零。
因此,計算返回的值如下:
Value 1 + Value 2 + Value 3
當此值超過配置給資料庫執行個體使用之資料庫執行個體類別的記憶體 1.2 倍時,資料庫執行個體會置於不相容參數的狀態。如需配置給資料庫執行個體類別之記憶體的相關資訊,請參閱 的資料庫執行個體類別的硬體規格。
計算將 max_connections
參數的值乘以數個參數的總和。如果 max_connections
參數設定為較大的值,則可能會導致檢查傳回資料庫執行個體潛在記憶體用量非常高的值。在這種情況下,請考慮降低 max_connections
參數的值。
若要解決此問題,請完成下列步驟:
-
調整與資料庫執行個體相關聯的資料庫參數群組中的記憶體參數。這樣做,可讓潛在的記憶體用量低於配置給其資料庫執行個體類別的記憶體 1.2 倍。
如需有關設定參數的詳細資訊,請參閱 修改 Amazon RDS Amazon 數據庫參數組中的參數。
-
重新啟動資料庫執行個體。
如需有關設定參數的詳細資訊,請參閱 啟動先前已停止的 Amazon RDS 資料庫執行個體。
診斷和解決僅供讀取複本之間的延遲
在您建立 My SQL或 MariaDB 僅供讀取複本且複本可供使用之後,Amazon 會RDS先複寫從僅供讀取複本建立操作開始起對來源資料庫執行個體所做的變更。在此階段期間,僅供讀取複本的複寫延遲時間將大於 0。您可以檢視 Amazon RDSReplicaLag
指標 CloudWatch ,在 Amazon 中監控此延遲時間。
指標會報告 MariaDB 或 My ReplicaLag
SQL SHOW REPLICA STATUS
命令Seconds_Behind_Master
欄位的值。如需詳細資訊,請參閱我的SQL文件中的SHOWREPLICASTATUS陳述
當 ReplicaLag
指標到達 0,複本即已跟上來源資料庫執行個體。如果 ReplicaLag
指標傳回 -1,複寫可能為非作用中。若要對複寫錯誤進行故障診斷,請參閱 診斷和解決 My SQL或 MariaDB 讀取複寫失敗。如果 ReplicaLag
的值為 -1,也可能表示系統無法判斷 Seconds_Behind_Master
值,或該值為 NULL
。
注意
先前使用的 MariaDB 和 MySQL 版本SHOW SLAVE STATUS
,而非 SHOW REPLICA STATUS
。如果您使用的是 10.5 版之前的 MariaDB 或 8.0.23 版之前的 MySQL 版本,請使用 SHOW SLAVE STATUS
。
在網路中斷期間,或在維護時段套用修補程式時,ReplicaLag
指標即會傳回 -1。在這種情況下,請等候系統還原網路連線,或是等待維護時段結束,隨後再重新檢查 ReplicaLag
指標。
My SQL和 MariaDB 讀取複寫技術是非同步的。因此您可以預期來源資料庫執行個體的 BinLogDiskUsage
指標與僅供讀取複本上的 ReplicaLag
指標偶爾會增加。例如,請考慮一個情況,其中來源資料庫執行個體可同時出現大量寫入操作。同時,會使用單一輸入/輸出執行緒,對僅供讀取複本的寫入操作進行序列化。這種情況可能會導致來源執行個體和僅供讀取複本之間發生延遲。
如需有關僅供讀取複本和我的 的詳細資訊SQL,請參閱我的文件中的SQL複寫實作詳細資訊
您可以利用執行下列動作,減少對來源資料庫執行個體的更新與對僅供讀取複本的後續更新之間的延遲:
-
將僅供讀取複本的資料庫執行個體類別設定為與來源資料庫執行個體具有相等的儲存體大小。
-
確保來源資料庫執行個體和僅供讀取複本所使用的資料庫參數群組中的參數設定相容。如需詳細資訊和範例,請參閱下一節中
max_allowed_packet
參數的討論。 -
停用查詢快取。針對經常修改的資料表,因為快取已遭鎖定並且經常重新整理,使用查詢快取可能會增加複本延遲。若是這種情況,如果停用查詢快取,您可能會發現複本延遲較少。您可以在資料庫執行個體的資料庫參數群組中將
query_cache_type parameter
設定為 0,以停用查詢快取。如需查詢快取的詳細資訊,請參閱查詢快取組態。 -
對 InnoDB for My SQL或 MariaDB 的僅供讀取複本上的緩衝區集區進行暖化。如果您有經常更新的一組小型資料表,並且使用 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或 MariaDB 讀取複寫失敗
Amazon 會RDS監控僅供讀取複本的複寫狀態。RDS Error
如果複寫因任何原因停止, 會將僅供讀取複本執行個體的複寫狀態欄位更新為 。您可以檢視複寫錯誤欄位,檢閱 My SQL或 MariaDB 引擎擲回的相關錯誤詳細資訊。 也會產生指出僅供讀取複本之狀態的事件,包括 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文件中二進位記錄的安全和不安全陳述式判斷。
下列步驟有助於解決您的複寫錯誤:
-
如果遇到邏輯錯誤,而您可以安全地略過錯誤,請遵循略過RDS適用於 My 的目前複寫錯誤SQL中所述的步驟。您的 MySQL 或 MariaDB 資料庫執行個體必須執行包含
mysql_rds_skip_repl_error
程序的版本。如需詳細資訊,請參閱mysql.rds_skip_repl_error。 -
如果遇到二進位記錄檔位置問題,您可以使用
mysql_rds_next_master_log
命令來變更從屬重播位置。您的 My SQL或 MariaDB 資料庫執行個體必須執行支援mysql_rds_next_master_log
命令的版本,才能變更複本重播位置。如需版本資訊,請參閱。 -
您可能會因為高DML負載而遇到暫時性效能問題。若是如此,您可以在僅供讀取複本的資料庫參數群組中將
innodb_flush_log_at_trx_commit
參數設定為 2。這樣做有助於僅供讀取複本追上進度,但它可暫時降低原子、一致性、隔離和耐久性 (ACID)。 -
您可以刪除僅供讀取複本,並使用相同的資料庫執行個體識別符來建立執行個體。如果您執行這項操作,端點仍會與與舊的僅供讀取複本相同。
如果複寫錯誤已修復,Replication State (複寫狀態) 會變更為 replicating (複寫中)。如需更多詳細資訊,請參閱 疑難排解 My 僅供SQL讀取複本問題。
在啟用二進位記錄的情況下建立觸發程序需要SUPER權限
嘗試在 RDS for MySQL 或 RDS for MariaDB 資料庫執行個體中建立觸發程序時,您可能會收到下列錯誤。
"You do not have the SUPER privilege and binary logging is enabled"
若要在啟用二進位記錄時使用觸發條件,需要 權限,此SUPER權限會限制RDS為 適用於 MySQL 和 RDS 適用於 MariaDB 資料庫執行個體。您可以在啟用二進位記錄時建立觸發條件,而不需要SUPER權限,方法是將 log_bin_trust_function_creators
參數設定為 true。若要將 log_bin_trust_function_creators
設定為 true,請建立新的資料庫參數群組或修改現有的資料庫參數群組。
您可以建立新的資料庫參數群組,以便在啟用二進位記錄的情況下,在 RDS for MySQL 或 RDS for MariaDB 資料庫執行個體中建立觸發程序。若要這麼做,請使用下列CLI命令。若要修改現有的參數群組,請從步驟 2 開始。
若要建立新的參數群組,以允許使用 啟用二進位記錄的觸發程序 CLI
-
建立新的參數群組。
用於 Linux, macOS,或 Unix:
aws rds create-db-parameter-group \ --db-parameter-group-name
allow-triggers
\ --db-parameter-group-familymysql8.0
\ --description "parameter group allowing triggers
"用於 Windows:
aws rds create-db-parameter-group ^ --db-parameter-group-name
allow-triggers
^ --db-parameter-group-familymysql8.0
^ --description "parameter group allowing triggers
" -
修改資料庫參數群組以允許觸發器。
用於 Linux, macOS,或 Unix:
aws rds modify-db-parameter-group \ --db-parameter-group-name
allow-triggers
\ --parameters "ParameterName=log_bin_trust_function_creators, ParameterValue=true, ApplyMethod=pending-reboot
"用於 Windows:
aws rds modify-db-parameter-group ^ --db-parameter-group-name
allow-triggers
^ --parameters "ParameterName=log_bin_trust_function_creators, ParameterValue=true, ApplyMethod=pending-reboot
" -
修改資料庫執行個體以使用新資料庫參數群組。
用於 Linux, macOS,或 Unix:
aws rds modify-db-instance \ --db-instance-identifier
mydbinstance
\ --db-parameter-group-nameallow-triggers
\ --apply-immediately用於 Windows:
aws rds modify-db-instance ^ --db-instance-identifier
mydbinstance
^ --db-parameter-group-nameallow-triggers
^ --apply-immediately -
若要讓變更生效,請手動將資料庫執行個體重新開機。
aws rds reboot-db-instance --db-instance-identifier
mydbinstance
診斷和解決point-in-time 還原失敗
還原包含暫存資料表的資料庫執行個體
嘗試 point-in-time還原 PITRMySQL 或 MariaDB 資料庫執行個體時,您可能會遇到下列錯誤。
Database instance could not be restored because there has been incompatible database activity for restore functionality. Common examples of incompatible activity include using temporary tables, in-memory tables, or using MyISAM tables. In this case, use of Temporary table was detected.
PITR 依賴來自 MySQL 或 MariaDB 的備份快照和二進位日誌 (binlog),將您的資料庫執行個體還原至特定時間。暫存資料表資訊在 binlog 中可能不可靠,並可能導致PITR失敗。如果您在 MySQL 或 MariaDB 資料庫執行個體中使用暫存資料表,您可以透過執行更頻繁的備份來降低PITR失敗的可能性。建立暫存資料表到下一個備份快照之間的時間內,PITR失敗的可能性最高。
還原包含記憶體內資料表的資料庫執行個體
還原具有記憶體內資料表的資料庫時,您可能會遇到問題。會在重新啟動期間清除記憶體內資料表。因此,您的記憶體內資料表在重新開機之後可能會是空白的。建議您使用記憶體內資料表時,思考您的解決方案以便在重新啟動時處理空白資料表。如果您使用具有複製資料庫執行個體的記憶體內資料表,則可能需要在重新啟動後,重新建立僅供讀取複本。如果將僅供讀取複本重新開機,而且無法從空白的記憶體內資料表還原資料,則可能必須進行此操作。
如需備份 和 的詳細資訊PITR,請參閱 備份簡介和 將資料庫執行個體還原至 Amazon 的指定時間 RDS。
複寫已停止錯誤
當您呼叫 mysql.rds_skip_repl_error
命令時,可能會收到錯誤訊息,指出複寫已關閉或停用。
因為複寫已停止且無法重新啟動,因此出現此錯誤訊息。
如果您需要略過大量錯誤,複寫延遲可能增加至超出二進位記錄檔的預設保留期間。在此情況下,由於在清除二進位記錄檔之前已在複本上重播該檔案,您可能會遇到嚴重錯誤。此清除動作會導致複寫停止,而您將無法再呼叫 mysql.rds_skip_repl_error
命令來略過複寫錯誤。
透過增加二進位記錄檔在複寫主控端上保留的小時數,即可以減輕此問題。在延長二進位記錄檔保留時間之後,您可以重新啟動複寫,並視需要呼叫 mysql.rds_skip_repl_error
命令。
若要設定 binlog 保留時間,請使用 mysql.rds_set_configuration 程序。並指定 'binlog retention hours' 組態參數,以及資料庫叢集上保留二進位記錄檔的時數 (最多 720 小時 (30 天))。下列範例會將 binlog 檔案的保留期間設定為 48 小時。
CALL mysql.rds_set_configuration('binlog retention hours', 48);
僅供讀取複本建立失敗或複寫中斷,出現嚴重錯誤 1236
變更 MySQL 或 MariaDB 資料庫執行個體的預設參數值後,您可能會遇到下列其中一個問題:
-
您無法建立資料庫執行個體的僅供讀取複本。
-
複寫失敗,出現
fatal error 1236
。
MySQL 和 MariaDB 資料庫執行個體的一些預設參數值有助於確保資料庫ACID符合法規,且僅供讀取複本可保護損毀。之所以能實現這個結果,是在認可之前,確定均透過將交易寫入二進位日誌,而讓每項認可獲得完全同步。將這些參數從其預設值進行變更以改善效能,在尚未將交易寫入二進位記錄時,可能造成複寫失敗。
若要解決此問題,請設定下列參數值:
-
sync_binlog = 1
-
innodb_support_xa = 1
-
innodb_flush_log_at_trx_commit = 1
無法將備份保留期間設定為 0
需要將備份保留期間設定為 0 有數個原因。例如,您可以透過將保留期間設定為 0 來立即停用自動備份。
在某些情況下,您可能會將值設定為 0,並收到一則訊息,表示保留期間必須介於 1 到 35 之間。在這些情況下,請檢查以確定您尚未設定執行個體的僅供讀取複本。僅供讀取複本需要用於管理僅供讀取複本日誌的備份,因此,您不可以設定 0 的保留期間。