文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁面 (TGZ) - 258.5Kb
手冊頁面 (Zip) - 365.5Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  已調用功能的複製

19.5.1.16 已調用功能的複製

諸如可載入函數和儲存程式 (儲存程序和函數、觸發程序和事件) 等已調用功能的複製提供下列特性

  • 功能的影響永遠會被複製。

  • 下列陳述式會使用基於陳述式的複製來複製

    但是,使用這些陳述式建立、修改或刪除的功能影響會使用基於列的複製來複製。

    注意

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

  • CREATE EVENTALTER EVENT 的情況下

  • 功能實作會以可更新的狀態駐留在複本上,因此如果來源失敗,則複本可以用作來源,而不會遺失事件處理。

若要判斷 MySQL 伺服器上是否有在不同伺服器 (先前作為來源) 上建立的任何排程事件,請查詢資訊結構描述 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;