复制调用的功能,如可加载函数和存储程序(存储过程和函数、触发器和事件),提供以下特征:
-
该功能的效果始终被复制。
-
以下语句使用基于语句的复制:
然而,使用这些语句创建、修改或删除的功能的效果使用基于行的复制。
Note尝试使用基于语句的复制来复制调用的功能将生成警告 语句不能以语句格式记录。例如,尝试使用基于语句的复制来复制可加载函数将生成该警告,因为 MySQL 服务器当前无法确定函数是否是确定性的。如果您确定调用的功能的效果是确定性的,可以安全地忽略这些警告。
-
在
CREATE EVENT
和ALTER EVENT
的情况下:-
无论状态如何,事件的状态将在副本上设置为
REPLICA_SIDE_DISABLED
(这不适用于DROP EVENT
)。 -
事件创建的源服务器在副本上被识别为其服务器 ID。
ORIGINATOR
列在INFORMATION_SCHEMA.EVENTS
中存储了这些信息。请参阅 第 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
)的事件,请修改前一个查询以包括 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 8.2.0 开始弃用。
在启用来自源的事件之前,您应该禁用复制服务器上的 MySQL 事件计划程序(使用类似 SET GLOBAL event_scheduler = OFF;
的语句),运行任何必要的 ALTER EVENT
语句,重新启动服务器,然后重新启用复制服务器上的事件计划程序(使用类似 SET GLOBAL event_scheduler = ON;
的语句)-
如果您后来将新源降级为复制服务器,您必须手动禁用由 ALTER EVENT
语句启用的所有事件。您可以通过将事件名称存储在单独的表中,或者使用 ALTER EVENT
语句将事件重命名为带有公共前缀的名称,例如 replicated_
,以标识它们。
如果您重命名了事件,那么当将此服务器降级为复制服务器时,您可以通过查询 EVENTS
表来标识事件,如下所示:
SELECT CONCAT(EVENT_SCHEMA, '.', EVENT_NAME) AS 'Db.Event'
FROM INFORMATION_SCHEMA.EVENTS
WHERE INSTR(EVENT_NAME, 'replicated_') = 1;