MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

17.5.1.16 呼び出される機能のレプリケーション

ユーザー定義関数 (UDF) やストアドプログラム (ストアドプロシージャーと関数、トリガー、およびイベント) などの呼び出される機能のレプリケーションには、次の特徴があります。

(ソースとして機能していた) 別のサーバーで作成されたスケジュール済イベントが 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 ENABLE を使用して各イベントを有効にする必要があります。ここで、event_name はイベントの名前です。

このレプリカでのイベントの作成に複数のソースが関与しており、サーバー ID source_id を持つ特定のソースでのみ作成されたイベントを識別する場合は、次に示すように、EVENTS テーブルで前のクエリーを変更して ORIGINATOR カラムを含めます:

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

同じような方法で SHOW EVENTS ステートメントで ORIGINATOR を使用できます。

SHOW EVENTS
    WHERE STATUS = 'SLAVESIDE_DISABLED'
    AND   ORIGINATOR = 'source_id'

ソースからレプリケートされたイベントを有効にする前に、(SET GLOBAL event_scheduler = OFF;などのステートメントを使用して) レプリカで MySQL イベントスケジューラを無効にし、必要な 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;