>  기사  >  데이터 베이스  >  MySQL 저장 프로시저, 함수, 트리거 및 복제: FAQ

MySQL 저장 프로시저, 함수, 트리거 및 복제: FAQ

高洛峰
高洛峰원래의
2016-12-02 14:50:091085검색

MySQL 5.1 저장 프로시저와 함수가 복제에서 작동합니까?
예, 표준 동작은 마스터 MySQL 서버에서 슬레이브 서버로 복제되는 저장 프로시저 및 함수에 구현됩니다. 섹션 20.4, "서브루틴 저장 및 바이너리 로그 기능 트리거"에 자세히 설명된 몇 가지 제한 사항이 있습니다.
마스터 서버에서 생성된 저장 프로시저와 함수를 슬레이브 서버에 복사할 수 있나요?
예, 일반 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 키워드로 워크스페이스를 실행하여 마스터 서버에서 오류를 일으키는 업데이트는 무시하고, 오류가 발생하지 않는 업데이트는 슬레이브 서버에 복사하도록 한다.

위의 제한 사항이 MySQL의 특정 시점 복구 수행 기능에 영향을 미치나요?
복제에 영향을 미치는 동일한 제한 사항이 특정 시점 복구에도 영향을 미칩니다.
앞서 언급한 제한 사항을 해결하려면 MySQL은 어떻게 해야 합니까?
향후 MySQL 릴리스에는 복제 처리 방법을 선택하는 기능이 포함될 것으로 예상됩니다.
명령문 기반 복제(현재 구현)
행 수준 복제(앞에서 설명한 모든 제한 사항이 해결됨)
복제 시 트리거가 작동하나요?
MySQL 5.1의 트리거 및 복제는 대부분의 다른 데이터베이스 엔진과 마찬가지로 작동하며, 트리거를 통해 마스터에서 수행된 작업은 슬레이브에 복제되지 않습니다. 대신, 마스터 MySQL 서버의 테이블에 있는 트리거는 모든 MySQL 슬레이브에 존재하는 테이블 내에 생성되어야 슬레이브에서도 트리거가 활성화될 수 있습니다.

마스터 서버에서 슬레이브 서버로 복사된 트리거로 어떻게 동작을 실행할 수 있나요?
먼저 마스터 서버의 트리거를 슬레이브 서버에서 재구축해야 합니다. 재구축되면 복제 프로세스는 복제와 관련된 다른 표준 DML 문처럼 작동합니다. 예: 기본 MySQL 서버에 삽입된 후 트리거가 있는 EMP 테이블을 생각해 보세요. 슬레이브 서버에도 동일한 EMP 테이블과 AFTER 삽입 트리거가 존재합니다. 복사 프로세스는 다음과 같습니다.
1 EMP에 대한 INSERT 문을 만듭니다.
2. EMP에서 프로그램 활성화 후.
3. INSERT 문이 바이너리 로그에 기록됩니다.
4. 슬레이브 서버의 복제는 EMP 테이블에 대한 INSERT 문을 선택하여 슬레이브 서버에서 실행합니다.
5. 슬레이브 서버 EMP에 위치한 AFTER 트리거 프로그램이 활성화됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.