群組複製能夠設定群組成員在指定情況下採取的動作。可以使用函式個別啟用和停用成員動作。伺服器的成員動作設定也可以在離開群組後重設為預設值。
管理員(具有 GROUP_REPLICATION_ADMIN
權限)可以使用 group_replication_enable_member_action
或 group_replication_disable_member_action
函式,在群組的主要成員上配置成員動作。然後,成員動作設定(包含所有成員動作及其是否啟用)會使用群組複製的群組訊息傳播到其他群組成員和加入的成員。因此,所有群組成員都具有相同的成員動作設定。您也可以在不是群組一部分的伺服器上配置成員動作,只要安裝了群組複製外掛程式即可。在這種情況下,成員動作設定不會傳播到任何其他伺服器。
如果您使用函式配置成員動作的伺服器是群組的一部分,則它必須是單主機模式群組中的目前主要成員,而且必須是多數成員的一部分。設定變更會由群組複製在內部追蹤,但不會給予 GTID,也不會寫入二進位記錄,因此不會傳播到群組外部的任何伺服器,例如下游複本。群組複製每次啟用或停用成員動作時,都會增加其成員動作設定的版本號碼。
成員動作設定會如下傳播給成員
在啟動群組時,引導群組的伺服器的成員動作設定會成為群組的設定。
如果群組的最低 MySQL 伺服器版本支援成員動作,則加入的成員會在加入時進行的狀態交換過程中接收群組的成員動作設定。在這種情況下,加入的成員會以群組的成員動作設定取代其自己的設定。
如果支援成員動作的加入成員加入最低 MySQL 伺服器版本不支援成員動作的群組,則在加入時不會收到成員動作設定。在這種情況下,加入的成員會將其自己的設定重設為預設值。
不支援成員動作的成員無法加入具有成員動作設定的群組,因為其 MySQL 伺服器版本低於現有群組成員執行的最低版本。
效能結構描述表格 replication_group_member_actions
會列出組態中可用的成員動作、觸發它們的事件,以及它們目前是否啟用。成員動作的優先順序為 1 到 100,數值越低者會優先執行。如果在執行成員動作時發生錯誤,則可以記錄成員動作的失敗,但在其他方面則會忽略。如果成員動作的失敗被視為嚴重,則可以根據 group_replication_exit_state_action
系統變數指定的原則來處理。
可以使用效能結構描述表格 replication_group_configuration_version
檢視的 mysql.replication_group_configuration_version
表格,會記錄成員動作設定的目前版本。每當使用函式啟用或停用成員動作時,版本號碼就會遞增。
group_replication_reset_member_actions
函式只能在不是群組一部分的伺服器上使用。它會將成員動作設定重設為預設設定,並將其版本號碼重設為 1。伺服器必須是可寫入的(read_only
系統變數設定為 OFF
),而且必須安裝群組複製外掛程式。如果您打算將伺服器作為獨立伺服器使用,且沒有成員動作或不同的成員動作,則可以使用此函式移除伺服器在作為群組一部分時使用的成員動作設定。
可以將成員動作 mysql_disable_super_read_only_if_primary
配置為讓單主機模式中的群組在選出新的主要成員時保持在超級唯讀模式,以便群組僅接受複寫的交易,而不接受來自用戶端的任何直接寫入。此設定表示當群組的目的是為另一個群組提供災難容錯的輔助備份時,您可以確保輔助群組與第一個群組保持同步。
預設情況下,當主要伺服器被選出時,會停用超級唯讀模式,使主要伺服器變成可讀寫,並接受來自複製來源伺服器和客戶端的更新。這是當成員動作 mysql_disable_super_read_only_if_primary
啟用時的情況,這也是其預設設定。如果您使用 group_replication_disable_member_action
函式將此動作設定為停用,則主要伺服器在選出後仍會保持超級唯讀模式。在此狀態下,它不會接受來自任何客戶端的更新,即使是擁有 CONNECTION_ADMIN
或 SUPER
權限的使用者也不例外。它仍會繼續接受由複製執行緒執行的更新。