為什麼我的 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) 使用的選擇性效能工具。如果您啟用或停用績效詳情,則不需要將資料庫執行個體重新開機。您也不會遇到任何停機時間或容錯移轉。
相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 9 個月前lg...
- 已提問 2 個月前lg...
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前