文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  调用功能的复制

19.5.1.16 调用功能的复制

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

  • 该功能的影响始终被复制。

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

    但是,使用这些语句创建、修改或删除的功能的影响使用基于行的复制进行复制。

    注意

    尝试使用基于语句的复制复制调用功能会导致警告 语句在语句格式中不安全以进行日志记录。例如,尝试使用基于语句的复制复制可加载函数会生成此警告,因为目前 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 的给定源上创建的事件,请修改 EVENTS 表上的先前查询,以包括 ORIGINATOR 列,如下所示

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

您可以以类似的方式在 SHOW EVENTS 语句中使用 ORIGINATOR

SHOW EVENTS
    WHERE STATUS = 'REPLICA_SIDE_DISABLED'
    AND   ORIGINATOR = 'source_id'
注意

REPLICA_SIDE_DISABLED 替换了已弃用的 SLAVESIDE_DISABLED

在启用从源复制的事件之前,您应该在副本上禁用 MySQL 事件调度程序(使用诸如 SET GLOBAL event_scheduler = OFF; 的语句),运行任何必要的 ALTER EVENT 语句,重新启动服务器,然后在副本上重新启用事件调度程序(使用诸如 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;