本節說明如何使用 group_replication_set_as_primary()
函數,變更單主伺服器群組中的哪個成員是主要伺服器。此函數可以在群組的任何成員上執行。完成此操作後,目前的主要伺服器會變成唯讀次要伺服器,而指定的群組成員會變成讀寫主要伺服器;這取代了 第 20.1.3.1 節「單主伺服器模式」中所述的一般主要伺服器選舉程序。
如果除了群組複製通道外,現有主要成員上還執行標準的來源到副本複製通道,您必須先停止該複製通道,才能變更主要成員。您可以使用效能結構描述 replication_group_members
資料表中的 MEMBER_ROLE
欄位來識別目前的主要伺服器。
如果並非所有成員都執行相同的 MySQL 伺服器版本,您只能指定執行群組中最低 MySQL 伺服器版本的新主要成員。套用此安全措施可確保群組維持與新功能的相容性。
在操作完成之前,群組正在等待的任何未提交交易都必須提交、回復或終止。您可以使用此函數指定執行中交易的逾時,從 0 秒 (立即) 到 3600 秒 (60 分鐘)。逾時沒有預設設定,因此如果您未設定,則等待時間沒有上限,而且在這段時間內可以開始新的交易。
當逾時到期時,對於尚未達到其提交階段的任何交易,用戶端工作階段會中斷連線,因此交易不會繼續。允許已達到其提交階段的交易完成。當您設定逾時時,也會防止主要伺服器從該時間點開始啟動新的交易。明確定義的交易 (使用 START TRANSACTION
或 BEGIN
陳述式) 受到逾時、中斷連線和傳入交易封鎖的影響,即使它們不修改任何資料也一樣。為了允許在函數運作時檢查主要伺服器,允許繼續執行不修改資料的單一陳述式,如 一致性規則下的允許查詢中所列。
藉由發出下列陳述式,傳入您要成為群組新主要伺服器的成員之 server_uuid
SELECT group_replication_set_as_primary(member_uuid);
您可以加入逾時,如下所示
SELECT group_replication_set_as_primary(‘00371d66-3c45-11ea-804b-080027337932’, 300)
若要檢查逾時的狀態,請使用效能結構描述 threads
資料表中的 PROCESSLIST_INFO
欄位,如下所示
mysql> SELECT NAME, PROCESSLIST_INFO FROM performance_schema.threads
-> WHERE NAME="thread/group_rpl/THD_transaction_monitor"\G
*************************** 1. row ***************************
NAME: thread/group_rpl/THD_transaction_monitor
PROCESSLIST_INFO: Group replication transaction monitor: Stopped client connections
狀態會顯示交易監控執行緒何時建立、何時停止新的交易、何時中斷連線具有未提交交易的用戶端連線,以及最後,程序何時完成且再次允許新的交易。
當動作執行時,您可以藉由發出此處顯示的陳述式來檢查其進度
mysql> SELECT event_name, work_completed, work_estimated
-> FROM performance_schema.events_stages_current
-> WHERE event_name LIKE "%stage/group_rpl%"\G
*************************** 1. row ***************************
EVENT_NAME: stage/group_rpl/Primary Election: Waiting for members to turn on super_read_only
WORK_COMPLETED: 3
WORK_ESTIMATED: 5