Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 저장 프로시저와 함수의 복제는 어떻게 이루어질까?

저장 프로시저(stored procedure)와 함수(function) 내에서 수행되는 표준적인 작업들은 마스터(master) MySQL 서버에서 슬레이브(slave) MySQL 서버로 복제됩니다. 뿐만 아니라, 마스터 서버에서 일반적인 DDL 문을 통해 저장 프로시저나 함수를 생성하는 작업 역시 슬레이브 서버로 복제되기 때문에 결과적으로 두 서버 모두에 동일한 객체가 존재하게 됩니다.

저장 프로시저 내부 작업이 복제되는 이유

저장 프로시저와 함수 내부에서 일어나는 작업들이 복제되는 이유는, MySQL이 프로시저와 함수 안에서 발생하는 각각의 DDL 이벤트를 기록(record)하기 때문입니다. 이렇게 기록된 이벤트들은 이후 슬레이브 MySQL 서버로 전달되어 복제됩니다.

반면, 저장 프로시저를 실제로 실행하기 위해 호출하는 CALL 구문 자체는 복제되지 않습니다. 아래 예시에서처럼 마스터 MySQL 서버에서 실행된 프로시저 호출은 슬레이브 서버로 복제되지 않습니다.

예시

먼저 간단한 저장 프로시저를 생성해 보겠습니다.

mysql> Delimiter //
mysql> CREATE PROCEDURE myproc()
    -> BEGIN
    -> DELETE FROM mytable LIMIT 1;
    -> END //

이제 마스터 MySQL 서버에서 이 프로시저를 호출하면, 해당 CALL 구문은 복제되지 않습니다.

mysql> Delimiter ;
mysql> CALL myproc();

정리

요약하면 다음과 같습니다.

  • 저장 프로시저·함수의 생성(DDL)은 마스터에서 슬레이브로 복제됩니다.
  • 프로시저·함수 내부에서 발생하는 개별 이벤트는 MySQL이 기록한 후 슬레이브로 복제됩니다.
  • 프로시저를 실행하는 CALL 구문 자체는 복제 대상이 아니므로, 마스터에서의 호출이 슬레이브에는 반영되지 않습니다.