文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  變更主要伺服器

20.5.1.1 變更主要伺服器

本節說明如何使用 group_replication_set_as_primary() 函數,變更單主伺服器群組中的哪個成員是主要伺服器。此函數可以在群組的任何成員上執行。完成此操作後,目前的主要伺服器會變成唯讀次要伺服器,而指定的群組成員會變成讀寫主要伺服器;這取代了 第 20.1.3.1 節「單主伺服器模式」中所述的一般主要伺服器選舉程序。

如果除了群組複製通道外,現有主要成員上還執行標準的來源到副本複製通道,您必須先停止該複製通道,才能變更主要成員。您可以使用效能結構描述 replication_group_members 資料表中的 MEMBER_ROLE 欄位來識別目前的主要伺服器。

如果並非所有成員都執行相同的 MySQL 伺服器版本,您只能指定執行群組中最低 MySQL 伺服器版本的新主要成員。套用此安全措施可確保群組維持與新功能的相容性。

在操作完成之前,群組正在等待的任何未提交交易都必須提交、回復或終止。您可以使用此函數指定執行中交易的逾時,從 0 秒 (立即) 到 3600 秒 (60 分鐘)。逾時沒有預設設定,因此如果您未設定,則等待時間沒有上限,而且在這段時間內可以開始新的交易。

當逾時到期時,對於尚未達到其提交階段的任何交易,用戶端工作階段會中斷連線,因此交易不會繼續。允許已達到其提交階段的交易完成。當您設定逾時時,也會防止主要伺服器從該時間點開始啟動新的交易。明確定義的交易 (使用 START TRANSACTIONBEGIN 陳述式) 受到逾時、中斷連線和傳入交易封鎖的影響,即使它們不修改任何資料也一樣。為了允許在函數運作時檢查主要伺服器,允許繼續執行不修改資料的單一陳述式,如 一致性規則下的允許查詢中所列。

藉由發出下列陳述式,傳入您要成為群組新主要伺服器的成員之 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