複寫可載入函數和預存程式 (預存程序和函數、觸發程序和事件) 等調用的功能,會提供下列特性:
功能的效果一律會被複寫。
下列陳述式使用基於陳述式的複寫進行複寫:
不過,使用這些陳述式建立、修改或捨棄的功能的效果會使用基於列的複寫進行複寫。
注意嘗試使用基於陳述式的複寫來複寫調用的功能,會產生警告 陳述式不適合以陳述式格式記錄。例如,嘗試使用基於陳述式的複寫來複寫可載入函數,會產生此警告,因為 MySQL 伺服器目前無法判斷該函數是否為決定性的。如果您絕對確定所調用功能的效果是決定性的,則可以安全地忽略這類警告。
在
CREATE EVENT
和ALTER EVENT
的情況下無論指定的狀態為何,複本上的事件狀態都會設定為
REPLICA_SIDE_DISABLED
(這不適用於DROP EVENT
)。建立事件的來源會由複本上的伺服器 ID 識別。
INFORMATION_SCHEMA.EVENTS
中的ORIGINATOR
欄會儲存此資訊。如需詳細資訊,請參閱第 15.7.7.19 節,「SHOW EVENTS 陳述式」。
功能實作會在複本上處於可續用狀態,以便在來源失敗時,可以使用複本作為來源,而不會遺失事件處理。
若要判斷 MySQL 伺服器上是否有任何排定的事件是在不同的伺服器 (充當來源) 上建立的,請查詢 Information Schema EVENTS
資料表,方式與此處顯示的類似:
SELECT EVENT_SCHEMA, EVENT_NAME
FROM INFORMATION_SCHEMA.EVENTS
WHERE STATUS = 'REPLICA_SIDE_DISABLED';
或者,您可以使用 SHOW EVENTS
陳述式,如下所示:
SHOW EVENTS
WHERE STATUS = 'REPLICA_SIDE_DISABLED';
將具有此類事件的複本升級為來源時,您必須使用 ALTER EVENT
來啟用每個事件,其中 event_name
ENABLEevent_name
是事件的名稱。
如果在此複本上建立事件時涉及多個來源,而您希望識別僅在具有伺服器 ID source_id
的特定來源上建立的事件,請修改先前在 EVENTS
表格上的查詢,以包含 ORIGINATOR
欄位,如下所示
SELECT EVENT_SCHEMA, EVENT_NAME, ORIGINATOR
FROM INFORMATION_SCHEMA.EVENTS
WHERE STATUS = 'REPLICA_SIDE_DISABLED'
AND ORIGINATOR = 'source_id'
您可以類似的方式將 ORIGINATOR
與 SHOW EVENTS
陳述式一起使用
SHOW EVENTS
WHERE STATUS = 'REPLICA_SIDE_DISABLED'
AND ORIGINATOR = 'source_id'
REPLICA_SIDE_DISABLED
取代已棄用的 SLAVESIDE_DISABLED
。
在啟用從來源複寫的事件之前,您應該停用複本上的 MySQL 事件排程器(使用類似 SET GLOBAL event_scheduler = OFF;
的陳述式),執行任何必要的 ALTER EVENT
陳述式,重新啟動伺服器,然後在之後重新啟用複本上的事件排程器(使用類似 SET GLOBAL event_scheduler = ON;
的陳述式)-
如果您之後將新的來源降級回複本,您必須手動停用所有由 ALTER EVENT
陳述式啟用的事件。您可以透過將先前顯示的 SELECT
陳述式中的事件名稱儲存在單獨的表格中,或使用 ALTER EVENT
陳述式來重新命名具有通用前綴(例如 replicated_
)的事件來識別它們。
如果您重新命名事件,則在將此伺服器降級回複本時,您可以透過查詢 EVENTS
表格來識別事件,如下所示
SELECT CONCAT(EVENT_SCHEMA, '.', EVENT_NAME) AS 'Db.Event'
FROM INFORMATION_SCHEMA.EVENTS
WHERE INSTR(EVENT_NAME, 'replicated_') = 1;