文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


20.7.7.4 退出動作

group_replication_exit_state_action 系統變數會指定當成員由於錯誤或問題而意外離開群組,且無法自動重新加入或不嘗試時,群組複寫的動作。請注意,在成員被驅逐的情況下,該成員在重新連線至群組之前不會知道自己被驅逐,因此只有在成員設法重新連線,或者成員對自己提出懷疑並驅逐自己的情況下,才會採取指定的動作。

依影響程度排序,退出動作如下:

  1. 如果 READ_ONLY 是退出動作,則執行個體會透過將系統變數 super_read_only 設定為 ON,將 MySQL 切換為超級唯讀模式。當成員處於超級唯讀模式時,即使用戶端具有 CONNECTION_ADMIN 權限(或已淘汰的 SUPER 權限),也無法進行任何更新。不過,用戶端仍然可以讀取資料,而且由於不再進行更新,因此隨著時間的推移,可能會增加讀取到過時資料的可能性。因此,使用此設定時,您需要主動監控伺服器是否有故障。此退出動作是預設值;執行後,成員的狀態會在群組的檢視中顯示為 ERROR

  2. 如果 OFFLINE_MODE 是退出動作,則執行個體會透過將系統變數 offline_mode 設定為 ON,將 MySQL 切換為離線模式。當成員處於離線模式時,已連線的用戶端使用者會在下次請求時中斷連線,並且不再接受連線,但具有 CONNECTION_ADMIN 權限(或已淘汰的 SUPER 權限)的用戶端使用者除外。群組複寫也會將系統變數 super_read_only 設定為 ON,因此即使用戶端已使用 CONNECTION_ADMINSUPER 權限連線,也無法進行任何更新。此退出動作可防止更新和過時讀取(具有所述權限的用戶端使用者進行的讀取除外),並使 MySQL Router 等 Proxy 工具能夠識別伺服器無法使用,並重新導向用戶端連線。它也會讓執行個體保持執行狀態,以便管理員可以嘗試解決問題,而無需關閉 MySQL。執行此退出動作後,成員的狀態會在群組的檢視中顯示為 ERROR(而不是 OFFLINE,這表示成員具有可用的群組複寫功能,但目前不屬於群組)。

  3. 如果 ABORT_SERVER 是退出動作,則執行個體會關閉 MySQL。指示成員自行關閉可以防止所有過時的讀取和用戶端更新,但也表示 MySQL 伺服器執行個體無法使用,必須重新啟動,即使可以在不執行該步驟的情況下解決問題。執行此退出動作後,成員會從群組檢視中的伺服器清單中移除。

請注意,無論設定何種退出動作,都需要操作員介入。因為已耗盡自動重新加入嘗試次數(或從未嘗試過)並被群組除名的前成員,除非重新啟動群組複寫,否則不允許重新加入。退出動作僅影響客戶端是否仍可讀取無法重新加入群組的伺服器上的資料,以及伺服器是否保持運行。

重要事項

如果成員在成功加入群組之前發生故障,則group_replication_exit_state_action指定的退出動作不會執行。在本地組態檢查期間發生故障,或者加入成員的組態與群組的組態不符時,都會發生這種情況。在這些情況下,super_read_only系統變數會保留其原始值,且伺服器不會關閉MySQL。為確保群組複寫未啟動時伺服器無法接受更新,我們因此建議在伺服器的組態檔案中,於啟動時設定super_read_only=ON,群組複寫會在主要成員成功啟動後將其變更為OFF。當伺服器設定為在伺服器啟動時啟動群組複寫(group_replication_start_on_boot=ON)時,此安全措施尤其重要,但當使用START GROUP_REPLICATION語法手動啟動群組複寫時,此安全措施也很有用。

如果成員在成功加入群組後發生故障,則會執行指定的退出動作。以下情況會發生這種情況:

  1. Applier 錯誤 - 複寫 applier 中發生錯誤。此問題無法恢復。

  2. 無法進行分散式復原 - 發生問題,表示無法完成群組複寫的分散式復原程序(使用遠端複製作業和二進位記錄檔的狀態傳輸)。群組複寫會在適當情況下自動重試分散式復原,但如果沒有其他選項可以完成程序,則會停止。如需詳細資訊,請參閱第 20.5.4.4 節「分散式復原的容錯」

  3. 群組組態變更錯誤 - 在使用函式執行的群組範圍組態變更期間發生錯誤,如第 20.5.1 節「設定線上群組」中所述。

  4. 主要選舉錯誤 - 在單一主要模式下選舉群組的新主要成員期間發生錯誤,如第 20.1.3.1 節「單一主要模式」中所述。

  5. 無法連線到大多數成員逾時 - 成員已失去與大多數群組成員的連線,因此處於少數狀態,且 group_replication_unreachable_majority_timeout 系統變數設定的逾時時間已過期。

  6. 成員從群組中除名 - 成員被懷疑有問題,且 group_replication_member_expel_timeout 系統變數設定的任何逾時時間已過期,而且成員已恢復與群組的通訊,並發現自己已被除名。

  7. 超出自動重新加入嘗試次數 - group_replication_autorejoin_tries 系統變數已設定為指定在失去大多數連線或被除名後,自動重新加入嘗試的次數,而成員已完成此次數的嘗試但未成功。

下表彙總了每種情況下的失敗情境和動作:

表 20.3 群組複寫失敗情境中的退出動作

失敗情境

使用 START GROUP_REPLICATION 啟動的群組複寫

使用 group_replication_start_on_boot =ON 啟動的群組複寫

成員無法通過本地組態檢查

加入成員與群組組態不符

super_read_onlyoffline_mode 未變更

MySQL 繼續執行

在啟動時設定 super_read_only=ON 以防止更新

super_read_onlyoffline_mode 未變更

MySQL 繼續執行

在啟動時設定 super_read_only=ON 以防止更新(重要)

成員發生 Applier 錯誤

無法進行分散式復原

群組組態變更錯誤

主要選舉錯誤

無法連線到大多數成員逾時

成員從群組中除名

超出自動重新加入嘗試次數

super_read_only 設定為 ON

offline_modesuper_read_only 設定為 ON

MySQL 關閉

super_read_only 設定為 ON

offline_modesuper_read_only 設定為 ON

MySQL 關閉