Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Replication of Invoked Features

19.5.1.16 复制调用的功能

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

  • 该功能的效果始终被复制。

  • 以下语句使用基于语句的复制:

    然而,使用这些语句创建、修改或删除的功能的效果使用基于行的复制。

    Note

    尝试使用基于语句的复制来复制调用的功能将生成警告 语句不能以语句格式记录。例如,尝试使用基于语句的复制来复制可加载函数将生成该警告,因为 MySQL 服务器当前无法确定函数是否是确定性的。如果您确定调用的功能的效果是确定性的,可以安全地忽略这些警告。

  • CREATE EVENTALTER EVENT 的情况下:

  • 该功能实现驻留在副本上,以便如果源服务器失败,副本可以用作源服务器而不丢失事件处理。

要确定 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 ENABLE 启用每个事件,其中 event_name 是事件的名称。

如果多个源服务器参与了在该副本上创建事件,并且您想确定来自特定源服务器(其服务器 ID 为 source_id)的事件,请修改前一个查询以包括 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'
Note

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;