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


MySQL 9.0 參考手冊  /  ...  /  複寫調用的功能

19.5.1.16 複寫調用的功能

複寫可載入函數和預存程式 (預存程序和函數、觸發程序和事件) 等調用的功能,會提供下列特性:

  • 功能的效果一律會被複寫。

  • 下列陳述式使用基於陳述式的複寫進行複寫:

    不過,使用這些陳述式建立、修改或捨棄的功能的效果會使用基於列的複寫進行複寫。

    注意

    嘗試使用基於陳述式的複寫來複寫調用的功能,會產生警告 陳述式不適合以陳述式格式記錄。例如,嘗試使用基於陳述式的複寫來複寫可載入函數,會產生此警告,因為 MySQL 伺服器目前無法判斷該函數是否為決定性的。如果您絕對確定所調用功能的效果是決定性的,則可以安全地忽略這類警告。

  • CREATE EVENTALTER EVENT 的情況下

  • 功能實作會在複本上處於可續用狀態,以便在來源失敗時,可以使用複本作為來源,而不會遺失事件處理。

若要判斷 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 ENABLE 來啟用每個事件,其中 event_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'

您可以類似的方式將 ORIGINATORSHOW 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;