STOP REPLICA [thread_types] [channel_option]
thread_types:
[thread_type [, thread_type] ... ]
thread_type: IO_THREAD | SQL_THREAD
channel_option:
FOR CHANNEL channel
停止複寫執行緒。
STOP REPLICA
需要 REPLICATION_SLAVE_ADMIN
權限(或已棄用的 SUPER
權限)。建議的最佳實務做法是在停止副本伺服器之前,先在副本上執行 STOP REPLICA
(如需詳細資訊,請參閱第 7.1.19 節「伺服器關閉程序」)。
如同 START REPLICA
,此陳述式可以與 IO_THREAD
和 SQL_THREAD
選項搭配使用,以指定要停止的複寫執行緒。請注意,群組複寫套用程式通道 (group_replication_applier
) 沒有複寫 I/O (接收器) 執行緒,只有複寫 SQL (套用程式) 執行緒。因此,使用 SQL_THREAD
選項會完全停止此通道。
STOP REPLICA
會導致正在進行的交易隱式提交。請參閱第 15.3.3 節,「導致隱式提交的陳述式」。
在發出此陳述式之前,gtid_next
必須設定為 AUTOMATIC
。
您可以透過設定系統變數 rpl_stop_replica_timeout
來控制 STOP REPLICA
等待逾時的時間長度。這可以用來避免 STOP REPLICA
與使用不同客戶端連線到副本的其他 SQL 陳述式之間發生死鎖。當達到逾時值時,發出指令的客戶端會返回錯誤訊息並停止等待,但 STOP REPLICA
指令仍然有效。一旦複寫執行緒不再忙碌,就會執行 STOP REPLICA
陳述式,副本也會停止。
在副本執行時,允許某些 CHANGE REPLICATION SOURCE TO
陳述式,具體取決於複寫執行緒的狀態。然而,在這種情況下,仍然支援在執行 CHANGE REPLICATION SOURCE TO
陳述式之前使用 STOP REPLICA
。有關詳細資訊,請參閱第 15.4.2.2 節,「CHANGE REPLICATION SOURCE TO 陳述式」和第 19.4.8 節,「故障轉移期間切換來源」。
可選的 FOR CHANNEL
子句讓您可以命名該陳述式所套用的複寫通道。提供 channel
FOR CHANNEL
子句會將 channel
STOP REPLICA
陳述式套用到特定的複寫通道。如果沒有命名通道且不存在額外的通道,則該陳述式會套用到預設通道。如果使用多個通道時 STOP REPLICA
陳述式未命名通道,則此陳述式會停止所有通道的指定執行緒。有關詳細資訊,請參閱第 19.2.2 節,「複寫通道」。
群組複寫(group_replication_applier
和 group_replication_recovery
)的複寫通道由伺服器執行個體自動管理。 STOP REPLICA
完全不能與 group_replication_recovery
通道一起使用,並且只有在群組複寫未執行時才應與 group_replication_applier
通道一起使用。 group_replication_applier
通道只有一個應用程式執行緒,沒有接收器執行緒,因此如果需要,可以使用 SQL_THREAD
選項(不使用 IO_THREAD
選項)將其停止。
當副本是多執行緒時(replica_parallel_workers
的值是非零值),從中繼日誌執行的交易序列中的任何間隙都會在停止工作執行緒時關閉。如果副本意外停止(例如,由於工作執行緒中發生錯誤,或另一個執行緒發出 KILL
),同時正在執行 STOP REPLICA
陳述式,則從中繼日誌執行的交易序列可能會變得不一致。有關詳細資訊,請參閱第 19.5.1.34 節,「複寫與交易不一致性」。
當來源使用基於列的二進位日誌格式時,如果您正在複寫任何使用非交易儲存引擎的資料表,則應在關閉副本伺服器之前,在副本上執行 STOP REPLICA
或 STOP REPLICA SQL_THREAD
。如果目前的複寫事件群組已修改一或多個非交易資料表,則 STOP REPLICA
會等待最多 60 秒以完成事件群組,除非您針對複寫 SQL 執行緒發出 KILL QUERY
或 KILL CONNECTION
陳述式。如果在逾時後事件群組仍然未完成,則會記錄錯誤訊息。
當來源使用基於陳述式的二進位日誌格式時,在來源具有開啟的暫時資料表時變更來源可能會不安全。這是為什麼不建議對暫時資料表進行基於陳述式的複寫的原因之一。您可以透過檢查 Replica_open_temp_tables
的值來找出副本上是否有任何暫時資料表。當使用基於陳述式的複寫時,在執行 CHANGE REPLICATION SOURCE TO
之前,此值應為 0。如果副本上有任何開啟的暫時資料表,則在發出 STOP REPLICA
後發出 CHANGE REPLICATION SOURCE TO
陳述式會導致 ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO
警告。