작성자: shuixian
MySQL 5.1 저장 프로시저와 함수가 복제에서 작동합니까?
예, 표준 동작은 마스터 MySQL 서버에서 슬레이브 서버로 복제되는 저장 프로시저 및 함수에서 수행됩니다.
마스터 서버에서 생성된 저장 프로시저와 함수를 슬레이브 서버에 복사할 수 있나요?
예, 일반 DDL 문을 통해 실행되는 저장 프로시저 및 함수는 마스터 서버에서 생성된 내용이 슬레이브 서버에 복사되므로 대상이 두 서버 모두에 존재하게 됩니다. 저장 프로시저 및 함수에 대한 ALTER 및 DROP 문도 복제됩니다.
복제된 저장 프로시저 및 함수 내에서는 동작이 어떻게 발생합니까?
MySQL은 저장 프로시저 및 함수 내에서 발생하는 모든 DML 이벤트를 기록하고 이러한 개별 작업을 슬레이브 서버에 복제합니다. 저장 프로시저 및 함수에 대한 실제 호출은 복사되지 않습니다.
저장 프로시저, 함수 및 복제를 함께 사용하기 위한 특별한 보안 요구 사항이 있습니까?
예, 슬레이브에는 마스터의 바이너리 로그를 읽는 모든 명령문을 실행할 수 있는 권한이 있으므로 복제에 사용되는 저장 프로시저 및 함수에 대해 지정된 보안 제약 조건이 존재합니다. 특정 시점 복구 목적으로 일반적으로 복제 또는 바이너리 로깅이 활성화된 경우 MySQL DBA는 두 가지 보안 옵션을 사용할 수 있습니다.
저장 프로시저를 생성하려는 모든 사용자에게는 SUPER 권한이 부여되어야 합니다.
또는 DBA가 log_bin_trust_routine_creators 시스템 변수를 1로 설정할 수 있습니다. 이렇게 하면 표준 CREATE ROUTINE 권한이 있는 누구나 저장 프로시저 및 함수를 생성할 수 있습니다.
저장 프로시저 및 함수 복사 동작에 대한 제한 사항은 무엇입니까?
저장 프로시저에 포함된 불확정(임의) 또는 시간 기반 줄은 제대로 복사되지 않습니다. 무작위로 생성된 결과는 본질적으로 예측 가능하며 안정적으로 복제할 수 없습니다. 따라서 슬레이브에 복제된 무작위 동작은 마스터에서 발생하는 동작을 반영하지 않습니다. 저장 프로시저 또는 함수 DETERMINISTIC을 선언하거나 log_bin_trust_routine_creators에서 시스템 변수를 0으로 설정하면 임의 값 작업을 호출할 수 있습니다.
또한 이러한 시간 기반 동작은 복제에 사용되는 바이너리 로그를 통해 저장 프로시저에서 재현할 수 없기 때문에 슬레이브 서버에서 시간 기반 동작을 재현할 수 없습니다. 바이너리 로그는 DML 이벤트만 기록하고 타이밍 제약 조건을 포함하지 않기 때문입니다.
마지막으로 대규모 DML 작업(예: 대량 삽입) 중에 비대화형 테이블에 오류가 발생하면 비대화형 테이블이 복제될 수 있으며 마스터 서버는 복제된 버전의 DML 작업에서 부분적으로 업데이트될 수 있습니다. 비대화형 테이블의 그런데 발생한 오류로 인해 슬레이브 서버에 대한 업데이트가 이루어지지 않았습니다. 해당 함수의 DML 동작은 IGNORE 키워드로 워크스페이스를 실행하여 마스터 서버에서 오류를 일으키는 업데이트는 무시하고, 오류가 발생하지 않는 업데이트는 슬레이브 서버에 복사하도록 한다.