复制诸如用户定义函数(UDF)和存储程序(存储过程和函数,触发器和事件)之类的已调用功能具有以下特征:
该功能的效果始终被复制。
使用基于语句的复制来复制以下语句:
CREATE EVENT
ALTER EVENT
DROP EVENT
CREATE PROCEDURE
DROP PROCEDURE
CREATE FUNCTION
DROP FUNCTION
CREATE TRIGGER
DROP TRIGGER
但是,使用基于行的复制来复制使用这些语句创建,修改或删除的功能的效果。
注意
尝试使用基于语句的复制来复制调用的功能会产生警告, “以语句格式登录是不安全的”。例如,尝试使用基于语句的复制来复制UDF会产生此警告,因为MySQL服务器目前无法确定UDF是否是确定性的。如果您完全确定所调用功能的影响是确定性的,则可以放心地忽略此类警告。
在的情况下CREATE EVENT 和ALTER EVENT:
SLAVESIDE_DISABLED无论指定的状态如何, 事件的状态都设置为 从属设备上的状态(不适用于DROP EVENT)。
通过从属服务器的服务器ID在从属服务器上标识创建事件的主服务器。中的 ORIGINATOR列 INFORMATION_SCHEMA.EVENTS 和中的originator列 mysql.event存储此信息。有关更多信息,请参见第21.8节“ INFORMATION_SCHEMA事件表”和 第13.7.5.19节“ SHOW EVENTS语句”。
功能实现以可更新的状态驻留在从属设备上,因此,如果主设备出现故障,则可以将该从设备用作主设备,而不会丢失事件处理。
要确定在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的给定主服务器上创建的事件 master_id,请修改EVENTS表上的上一个查询以包括该 ORIGINATOR列,如下所示:
SELECT EVENT_SCHEMA, EVENT_NAME, ORIGINATOR
FROM INFORMATION_SCHEMA.EVENTS
WHERE STATUS = ‘SLAVESIDE_DISABLED’
AND ORIGINATOR = ‘master_id’
您可以采用类似的方式使用ORIGINATOR该 SHOW EVENTS语句:
SHOW EVENTS
WHERE STATUS = ‘SLAVESIDE_DISABLED’
AND ORIGINATOR = ‘master_id’
在启用从主服务器复制的事件之前,您应该在从服务器上禁用MySQL Event Scheduler(使用诸如的语句SET GLOBAL event_scheduler = OFF;),运行任何必要的ALTER EVENT语句,重启服务器,然后再在从服务器上重新启用Event Scheduler(使用诸如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;




