Spec-Zone.ru › MySQL 9.2

19.5.1.16 Репликация вызываемых функций

Репликация вызываемых функций, таких как загружаемые функции и хранимые программы (хранимые процедуры и функции, триггеры и события), обладает следующими характеристиками:

  • Эффекты функции всегда реплицируются.

  • Следующие операторы реплицируются с помощью репликации на основе операторов:

    • CREATE EVENT

    • ALTER EVENT

    • DROP EVENT

    • CREATE PROCEDURE

    • DROP PROCEDURE

    • CREATE FUNCTION

    • DROP FUNCTION

    • CREATE TRIGGER

    • DROP TRIGGER

    Однако, эффекты функций, созданных, изменённых или удалённых с помощью этих операторов, реплицируются с помощью репликации на основе строк.

    Примечание

    Попытка репликации вызываемых функций с помощью репликации на основе операторов генерирует предупреждение Оператор не подходит для протоколирования в формате оператора. Например, попытка репликации загружаемой функции с помощью репликации на основе операторов генерирует это предупреждение, поскольку в настоящее время сервер MySQL не может определить, является ли функция детерминированной. Если вы абсолютно уверены, что эффекты вызываемой функции детерминированы, вы можете безопасно проигнорировать такие предупреждения.

  • В случае CREATE EVENT и ALTER EVENT:

    • Состояние события устанавливается в REPLICA_SIDE_DISABLED на реплике независимо от указанного состояния (это не относится к DROP EVENT).

    • Источник, на котором было создано событие, идентифицируется на реплике по его идентификатору сервера. Столбец ORIGINATOR в INFORMATION_SCHEMA.EVENTS хранит эту информацию. См. Раздел 15.7.7.20, «Оператор SHOW EVENTS», для получения дополнительной информации.

  • Реализация функции находится на реплике в обновляемом состоянии, поэтому если источник откажет, реплика может быть использована в качестве источника без потери обработки событий.

Чтобы определить, есть ли запланированные события на сервере MySQL, которые были созданы на другом сервере (который действовал как источник), запросите таблицу Информационной схемы 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 — имя события.

Если в создании событий на этой реплике участвовало более одного источника, и вы хотите определить события, созданные только на определенном источнике с идентификатором сервера source_id, измените предыдущий запрос к таблице EVENTS, включив столбец 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 на реплике (например, используя оператор 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;

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/replication-features-invoked.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API