下列函式可讓您將單一主節點複寫群組的成員設定為接管主節點。目前的主節點會變成唯讀次要節點,而指定的群組成員會變成可讀寫主節點。此函式可在單一主節點模式下執行的複寫群組的任何成員上使用。此函式會取代一般的主節點選舉程序;如需更多資訊,請參閱第 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 8.4 中,它也會等待任何正在進行的 DDL 陳述式完成,例如
ALTER TABLE
。此目的被視為 DDL 陳述式的操作在此處列出ALTER TABLE
這也包括任何開啟的游標 (請參閱第 15.6.6 節,「游標」)。
更多資訊,請參閱第 20.5.1.1 節「變更主節點」。