Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
為什麼我的 Amazon RDS for MySQL 資料庫執行個體在「重新開機」過程中卡住?
我正在嘗試重新啟動我的 Amazon Relational Database Service (Amazon RDS) for MySQL 資料庫執行個體。但是,我的資料庫執行個體在「重新開機」狀態中卡住,或者重新開機花費比預期更長的時間。為什麼會發生這種情況,我該如何解決這個問題?
簡短描述
執行重新開機之前,請務必停止資料庫執行個體中的任何傳入或進行中的交易。進行中的交易將會停止,任何未認可的交易將會回復。
**注意:**未認可交易的回復可能是一項昂貴的作業。未認可交易也可能需要很長時間完成,才能讓您的 Amazon RDS for MySQL 執行個體再次可供使用。
開始重新開機之後,程序無法取消,並且重新開機會繼續直到完成為止。如果重新開機的時間超過預期,請調查根本原因,並考慮下列疑難排解方法:
- 檢查進行中的查詢。
- 檢查是否有任何未清除的交易。
- 檢閱 MySQL 錯誤日誌檔。
解決方案
檢查進行中的查詢
使用 SHOW FULL PROCESSLIST 命令來檢查您的 Amazon RDS for MySQL 執行個體上是否有任何作用中查詢:
mysql> SHOW FULL PROCESSLIST;
以下是範例輸出,表示 UPDATE 查詢仍在進行中:
+-----+---------------+---------------------+------+---------+------+----------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +-----+---------------+---------------------+------+---------+------+----------+-----------------------+ | 2 | rdsadmin | localhost:30662 | NULL | Sleep | 4 | | NULL | | 101 | admin | 172.31.28.252:58288 | NULL | Query | 111 | updating |UPDATE tutorials SET tu| +-----+---------------+---------------------+------+---------+------+----------+-----------------------+
輸出提供有關您的資料庫上執行的 MySQL 執行緒的資訊。如果有仍在執行中的查詢,請在執行重新開機之前允許查詢完成。
**注意:**以主要使用者的身分執行 SHOW FULL PROCESSLIST 查詢。如果您不是主要使用者,那麼您必須擁有 MySQL 伺服器管理權限,以檢視 MySQL 執行個體上的所有作用中執行緒。否則,輸出只會顯示使用者的 MySQL 帳戶中的作用中執行緒 ID。如需詳細資訊,請參閱 MySQL 網站上的 SHOW PROCESSLIST 陳述式和 MySQL 伺服器管理。
檢查是否有任何未清除的交易
MySQL InnoDB 引擎使用多版本並行控制 (MVCC),在交易期間維護已變更資料列的舊版本清單。如果交易必須回復,則 InnoDB 可以在這個程序中執行任何復原操作。舊版本的資料列會在復原空間內擷取。在交易期間不再呼叫這些舊版本時,就會清除這些舊版本。如果擷取的變更因為交易仍然在參考而未遭到清除,則歷史記錄清單長度會變大。如需詳細資訊,請參閱 MySQL 網站上的 InnoDB 多版本控制。
未清除的交易會以歷史記錄清單長度值表示。此值可以在 SHOW ENGINE INNODB STATUS 命令輸出中的 "TRANSACTIONS" 底下找到。請注意,歷史記錄清單長度通常是較低的值,儘管寫入繁重的工作負載或長時間執行的交易可能會導致值增加。如需有關歷史記錄清單長度值的詳細資訊,請參閱 MySQL 網站上的清除組態。
若要檢查歷史記錄清單長度內是否有任何未清除的交易,請使用 SHOW ENGINE INNODB STATUS 命令。這個命令的輸出也可以讓您檢視歷史記錄清單長度的大小,以及 "TRANSACTIONS" 區段底下列出的任何進行中的交易。如需檢閱所列出交易的詳細資訊,請參閱 MySQL 網站上的 InnoDB 標準監控和鎖定監控輸出。
例如:
------------ TRANSACTIONS ------------ Trx id counter 105746959 Purge done for trx's n:o < 105746958 undo n:o < 0 state: running but idle History list length 32 LIST OF TRANSACTIONS FOR EACH SESSION: ---TRANSACTION 328605240396520, not started 0 lock struct(s), heap size 1136, 0 row lock(s) ---TRANSACTION 328605240395600, not started 0 lock struct(s), heap size 1136, 0 row lock(s)
**注意:**如果歷史記錄清單長度是一個很高的值,並且存在作用中交易,那麼它不是重新開機的最佳實務。
如需詳細資訊,請參閱 MySQL 網站上的 SHOW ENGINE INNODB STATUS。
檢閱 MySQL 錯誤日誌檔
在 Amazon RDS 中,預設會啟用 MySQL 錯誤日誌檔。如果您懷疑 RDS 執行個體花費太長時間才能再次可供使用,請檢閱 MySQL 錯誤日誌檔的內容。MySQL 會在啟動、關閉或遇到任何錯誤時寫入錯誤日誌檔。
例如,InnoDB 可能必須在 InnoDB 損毀修復程序過程中回復任何未認可的交易。如果任何未認可的交易回復,則 MySQL 錯誤日誌會記錄此事件。如需詳細資訊,請參閱 MySQL 網站上的 InnoDB 損毀修復。
其他疑難排解
注意:如果您選擇執行時間點復原 (PITR) 或從快照還原,則新的 Amazon RDS 執行個體可能無法立即使用。如需詳細資訊,請參閱下列文章:
如果您的 Amazon RDS for MySQL 資料庫執行個體重新開機一段時間,請嘗試下列其他疑難排解提示:
- 如果您的資料庫執行個體已啟用自動備份,請執行 PITR 以從指定時間還原至新的 Amazon RDS 執行個體。您可以在備份保留期內還原到任何時間點。
**注意:**根據預設,還原的資料庫執行個體與預設的資料庫參數和選項群組相關聯。但是,您可以透過在還原期間指定自訂參數群組和選項群組來使用它們。 - 透過建立新的資料庫執行個體,從最近的資料庫快照還原您的資料庫執行個體。您可以在還原的資料庫執行個體狀態可用時立即使用。
- 如果您的資料庫執行個體具有僅供讀取複本,請提升僅供讀取複本成為獨立資料庫執行個體。提升僅供讀取複本時,資料庫執行個體會在資料庫執行個體可用之前自動重新開機。
定期監控資料庫活動也是最佳實務。您可以使用下列工具監控 Amazon RDS for MySQL 資料庫執行個體:
- Amazon CloudWatch:使用 Amazon CloudWatch,您可以監控任何進行中的資料庫工作負載。如果您觀察資料庫連線、CPU 使用率或寫入/讀取 IOPS 中有高的值,則資料庫執行個體中可能有進行中的活動。
- 增強型監控:增強型監控需要許可,才能將作業系統指標資訊傳送至 CloudWatch Logs。您可以使用 AWS Identity and Access Management (IAM) 角色授予增強型監控許可。啟用增強型監控之前,您必須先建立 IAM 角色。
- 績效詳情:效能結構描述是 Amazon RDS for MySQL (或 MariaDB) 使用的選擇性效能工具。如果您啟用或停用績效詳情,則不需要將資料庫執行個體重新開機。您也不會遇到任何停機時間或容錯移轉。
相關內容
- 已提問 2 年前
- 已提問 4 個月前
