為什麼我的 Amazon RDS for MySQL 資料庫執行個體在「重新開機」過程中卡住?

上次更新日期:2021 年 10 月 28 日

我正在嘗試重新啟動我的 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) 使用的選擇性效能工具。如果您啟用或停用績效詳情,則不需要將資料庫執行個體重新開機。您也不會遇到任何停機時間或容錯移轉。

此文章是否有幫助?


您是否需要帳單或技術支援?