17.4.1.11 호출되는 기능의 복제
사용자 정의 함수 (UDF) 및 저장 프로그램 (저장 프로 시저 및 함수, 트리거 및 이벤트) 등의 호출 기능의 복제에는 다음과 같은 특징이 있습니다.
기능의 영향은 항상 복제됩니다.
다음 문은 문 기반 복제를 사용하여 복제됩니다.
CREATE EVENT
ALTER EVENT
DROP EVENT
CREATE PROCEDURE
DROP PROCEDURE
CREATE FUNCTION
DROP FUNCTION
CREATE TRIGGER
DROP TRIGGER
그러나 이러한 문을 사용하여 작성, 수정 또는 삭제하는 기능의 영향은 열 기반 리플리케이션을 사용하여 복제됩니다.
참고호출하는 기능을 문 기반 복제를 사용하여 복제하려고하면 경고가 생성됩니다 : Statement is not safe to log in statement format. 예를 들어, 명령문 기반 응용 프로그램에서 UDF를 복제하려고하면 MySQL 서버는 현재 UDF가 결정적 여부를 확인할 수 없기 때문에이 경고가 생성됩니다. 호출되는 기능의 영향이 결정적임을 확실히 알고있는 경우는 이러한 경고를 무시해도 안전합니다.
CREATE EVENT
및ALTER EVENT
의 경우 :이벤트의 상태는 지정된 상태에 관계없이 슬레이브에서
SLAVESIDE_DISABLED
로 설정됩니다 (이것은DROP EVENT
에는 적용되지 않습니다).이벤트가 생성 된 마스터는 슬레이브에서 서버 ID에 의해 식별됩니다.
INFORMATION_SCHEMA.EVENTS
의ORIGINATOR
컬럼 및mysql.event
의originator
열이 정보가 저장됩니다. 자세한 내용은 섹션 21.7 "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
ENABLEDevent_name
은 이벤트의 이름입니다.
여러 마스터가 슬레이브에서 이벤트를 만드는 데 사용 된 서버 ID master_id
를 가진 마스터에서 생성 된 이벤트 만 확인하고 싶다면, 여기에서 같이 EVENTS
테이블에 대한 앞서의 쿼리를 수정 하고 ORIGINATOR
컬럼을 추가하십시오.
SELECT EVENT_SCHEMA, EVENT_NAME, ORIGINATOR
FROM INFORMATION_SCHEMA.EVENTS
WHERE STATUS = 'SLAVESIDE_DISABLED'
AND ORIGINATOR = 'master_id
'
같은 방법으로 SHOW EVENTS
문 ORIGINATOR
를 사용할 수 있습니다.
SHOW EVENTS
WHERE STATUS = 'SLAVESIDE_DISABLED'
AND ORIGINATOR = 'master_id
'
마스터에서 복제 된 이벤트를 활성화하기 전에 슬레이브에서 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;