本節列出的函數用於控制 MySQL 複製中來源和副本伺服器的基於位置的同步。
表 14.28 位置同步函數
| 名稱 | 描述 | 已棄用 |
|---|---|---|
MASTER_POS_WAIT() |
封鎖直到副本已讀取並套用所有更新至指定位置 | 是 |
SOURCE_POS_WAIT() |
封鎖直到副本已讀取並套用所有更新至指定位置 |
MASTER_POS_WAIT(log_name,log_pos[,timeout][,channel])SOURCE_POS_WAIT()的已棄用別名。SOURCE_POS_WAIT(log_name,log_pos[,timeout][,channel])此函數用於控制來源-副本同步。它會封鎖直到副本已讀取並套用來源二進位記錄檔中指定位置之前的所有更新。
傳回值是副本必須等待以推進到指定位置的記錄事件數。如果未啟動複製 SQL 執行緒、未初始化副本的來源資訊、引數不正確或發生錯誤,則此函數傳回
NULL。如果已超過逾時,則傳回-1。如果在SOURCE_POS_WAIT()等待時複製 SQL 執行緒停止,則此函數傳回NULL。如果副本已超過指定位置,則此函數會立即傳回。如果二進位記錄檔位置已標記為無效,則此函數會等待直到已知有效的檔案位置。當
CHANGE REPLICATION SOURCE TO選項GTID_ONLY設定為複製通道,並且伺服器重新啟動或停止複製時,二進位記錄檔位置會標記為無效。在成功套用超過指定檔案位置的交易後,檔案位置會變成有效。如果 applier 未到達聲明的位置,則此函數會等待直到逾時。請使用SHOW REPLICA STATUS陳述式,以檢查二進位記錄檔位置是否已標記為無效。在多執行緒副本上,此函數會等待到
replica_checkpoint_group或replica_checkpoint_period系統變數所設定的限制到期時,當呼叫檢查點操作以更新副本的狀態時。視系統變數的設定而定,因此此函數可能會在達到指定位置後一段時間才傳回。如果使用二進位記錄檔交易壓縮,且指定位置的交易承載已壓縮 (作為
Transaction_payload_event),則此函數會等待直到已讀取並套用整個交易,並且已更新位置。如果指定
timeout值,則當經過timeout秒時,SOURCE_POS_WAIT()會停止等待。timeout必須大於或等於 0。(當伺服器以嚴格 SQL 模式執行時,會立即使用ER_WRONG_ARGUMENTS拒絕負數的timeout值;否則此函數傳回NULL,並引發警告。)選用的
channel值可讓您命名此函數套用至的複製通道。如需詳細資訊,請參閱 章節 19.2.2,「複製通道」。此函數對於基於陳述式的複製是不安全的。如果當
binlog_format設定為STATEMENT時使用此函數,則會記錄警告。