您可以使用下列函式,將單一主節點複寫群組的成員設定為接管成為主節點。目前的主節點會變成唯讀次要節點,而指定的群組成員會變成可讀寫的主節點。此函式可以在以單一主節點模式執行的複寫群組的任何成員上使用。此函式會取代一般的主節點選取程序;如需更多資訊,請參閱章節 20.5.1.1,「變更主節點」。
如果除了群組複寫通道之外,現有主節點成員上還執行標準的來源到複本複寫通道,您必須先停止該複寫通道,才能變更主節點成員。您可以使用效能架構 replication_group_members
表格中的 MEMBER_ROLE
資料行,來識別目前的主節點。
群組正在等待的任何未提交交易,都必須先提交、復原或終止,才能完成作業。您可以使用此函式,為執行中的交易指定逾時。若要使逾時生效,群組的所有成員都必須是 MySQL 8.0.29 或更新版本。
當逾時到期時,對於任何尚未達到提交階段的交易,用戶端工作階段會中斷連線,讓交易不會繼續。允許完成達到提交階段的交易。當您設定逾時時,也會防止新的交易從那時開始在主節點上啟動。明確定義的交易 (使用 START TRANSACTION
或 BEGIN
陳述式) 受到逾時、中斷連線和傳入交易封鎖的影響,即使它們未修改任何資料。為了允許在函式執行時檢查主節點,允許繼續執行未修改資料的單一陳述式,如一致性規則下允許的查詢中所列。
group_replication_set_as_primary()
指定群組的特定成員作為新的主節點,覆寫任何選取程序。
語法
STRING group_replication_set_as_primary(member_uuid[, timeout])
引數
member_uuid
:一個字串,其中包含您想要成為新主節點的群組成員的 UUID。timeout
:一個整數,指定當您使用此函式時,在現有主節點上執行的交易的逾時 (以秒為單位)。您可以將逾時設定為 0 秒 (立即) 到 3600 秒 (60 分鐘)。當您設定逾時時,新的交易無法從那時開始在主節點上啟動。逾時沒有預設設定,因此如果您沒有設定,等待時間就沒有上限,而且新的交易可以在該時間期間啟動。
傳回值
一個字串,其中包含作業的結果,例如是否成功。
範例
SELECT group_replication_set_as_primary(‘00371d66-3c45-11ea-804b-080027337932’, 300);
此函式會等待所有進行中的交易和 DML 作業完成,然後再選取新的主節點。在 MySQL 9.0 中,它也會等待任何進行中的 DDL 陳述式完成,例如
ALTER TABLE
。為了此目的被視為 DDL 陳述式的作業會列在這裡ALTER TABLE
這也包括任何開啟的游標 (請參閱章節 15.6.6,「游標」)。
如需更多資訊,請參閱章節 20.5.1.1,「變更主節點」。