Documentation Home

17.4.1.16 调用特征的复制

可加载函数和存储程序(存储过程和函数、触发器和事件)等调用功能的复制提供以下特征:

要确定 MySQL 服务器上是否有任何在不同服务器(充当复制源服务器)上创建的计划事件,请 INFORMATION_SCHEMA.EVENTS以类似于此处显示的方式查询表:

SELECT EVENT_SCHEMA, EVENT_NAME
    FROM INFORMATION_SCHEMA.EVENTS
    WHERE STATUS = 'SLAVESIDE_DISABLED';

或者,您可以使用如下SHOW EVENTS语句:

SHOW EVENTS
    WHERE STATUS = 'SLAVESIDE_DISABLED';

将具有此类事件的副本提升到复制源服务器时,必须使用启用每个事件 ,其中 是事件的名称。 ALTER EVENT event_name ENABLEevent_name

如果不止一个源参与在此副本上创建事件,并且您希望识别仅在具有服务器 ID 的给定源上创建的事件 source_id,请修改表上的先前查询EVENTS以包括该 ORIGINATOR列,如下所示:

SELECT EVENT_SCHEMA, EVENT_NAME, ORIGINATOR
    FROM INFORMATION_SCHEMA.EVENTS
    WHERE STATUS = 'SLAVESIDE_DISABLED'
    AND   ORIGINATOR = 'source_id'

您可以以类似的方式使用语句 ORIGINATORSHOW EVENTS

SHOW EVENTS
    WHERE STATUS = 'SLAVESIDE_DISABLED'
    AND   ORIGINATOR = 'source_id'

SET GLOBAL event_scheduler = OFF;在启用从源复制的事件之前,您应该在副本ALTER EVENT上 禁用 MySQL 事件调度程序(使用诸如诸如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;