可加载函数和存储程序(存储过程和函数、触发器和事件)等调用功能的复制提供以下特征:
特征的效果总是被复制。
使用基于语句的复制复制以下语句:
但是,使用这些语句创建、修改或删除的要素 的效果将使用基于行的复制进行复制。
笔记尝试使用基于语句的复制来复制调用的功能会产生警告 Statement is not safe to log in statement format。例如,尝试使用基于语句的复制来复制可加载函数会生成此警告,因为 MySQL 服务器目前无法确定该函数是否具有确定性。如果您绝对确定调用的功能的效果是确定性的,您可以安全地忽略此类警告。
在 和 的情况
CREATE EVENT
下ALTER EVENT
:无论指定的状态如何,事件的状态都设置为
SLAVESIDE_DISABLED
在副本上(这不适用于DROP EVENT
)。创建事件的源在副本上由其服务器 ID 标识。中的
ORIGINATOR
列INFORMATION_SCHEMA.EVENTS
和中的originator
列mysql.event
存储此信息。有关更多信息,请参阅第 21.3.8 节,“INFORMATION_SCHEMA EVENTS 表”和第 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 的给定源上创建的事件
source_id
,请修改表上的先前查询EVENTS
以包括该
ORIGINATOR
列,如下所示:
SELECT EVENT_SCHEMA, EVENT_NAME, ORIGINATOR
FROM INFORMATION_SCHEMA.EVENTS
WHERE STATUS = 'SLAVESIDE_DISABLED'
AND ORIGINATOR = 'source_id'
您可以以类似的方式使用语句
ORIGINATOR
:
SHOW 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;