slave_exec_mode = IDEMPOTENT 의 행동 소결

slave_exec_mode=IDEMPOTENT MySQL 복사 환경 에서 매우 유용 한 매개 변수 입 니 다. 준비 장치 가 실행 set global slave_exec_mode=IDEMPOTENT 되 기만 하면 준비 장치 의 sql thread 는 명 등 모드 에서 실 행 됩 니 다. 준비 기 는 insert 메 인 키, 유일한 키 충돌, update, delete 값 이 오 류 를 찾 지 못 했 을 때 계속 복원 하여 명 등 성 을 유지 할 수 있 습 니 다 (즉시 효력 이 발생 합 니 다. slave 의 sql 스 레 드 도 다시 시작 하지 않 아 도 됩 니 다).반면 유사 sql_slave_skip_counter=Nslave-skip-errors = N 와 같은 난폭 한 오 류 를 뛰 어 넘 는 방법 은 주 된 일치 성 을 파괴 할 수 있다.그러나 공식 문서 의 설명 은 매우 간결 합 니 다. 저 는 slave_exec_mode=IDEMPOTENT 복사 오류 가 발생 했 을 때 어떻게 일치 성 을 유지 하 는 지 궁금 합 니 다. 예 를 들 어 메 인 키 가 충돌 할 때 간단하게 건 너 뛰 거나 덮어 쓰 는 지 오늘 Percona 5.7 에서 실험 (binlog 는 row 형식) 을 했 습 니 다. 실험 과정 은 생략 되 었 고 다음 과 같이 요약 합 니 다.
1. insert 장면 은 이때 insert into 문 구 를 준비 하 는 효과 가 replace into 와 같 지만 insert into 를 replace into 로 전환 하여 실행 하 는 것 이 아 닙 니 다. 두 가지 상황 으로 나 눌 수 있 습 니 다. a. MySQL 은 autocommit 로 설정 하고 insert into 를 직접 설정 합 니 다. 이러한 insert insert into test set c1='a',c2='b';이때 insert into 문 구 는 준비 기 에서 실 행 될 때 홈 키 충돌 이 발생 하면 delete 로 전환 한 다음 insert 로 전환 합 니 다.
delete from test where c1='old_value' and c2='old_value';   
insert into test set c1='a',c2='b';   

홈 키 가 아 닌 유일한 키 충돌 이 발생 하면 update update test set set c1='a',c2='b' where c1='old_value' and c2='old_value'; 로 전환 합 니 다.
b. 시작 사 무 를 표시 할 때 (begin. insert into... commt;) 이러한 sql
begin;   
...... 
insert into test set c1='a',c2='b';   
...... 
commit;   

이 때 begin... commt 의 insert into 문 구 는 준비 기 에서 실 행 될 때 홈 키 충돌 이 발생 하면 유일한 키 충돌 은 delete 로 전환 한 다음 insert 입 니 다.
begin;   
...... 
delete from test where c1='old_value' and c2='old_value';   
insert into test set c1='a',c2='b';   
...... 
commit;   

2. update 필드 준비 장치 에 업데이트 할 기록 이 존재 하지 않 습 니 다. 이 update 건 너 뛰 기 는 실행 되 지 않 습 니 다.
3. delete 장면 은 update 장면 과 마찬가지 로 준비 기 가 이 delete 를 건 너 뛰 면 아무것도 하지 않 습 니 다.
메모: 명 등 모드 를 사용 할 때 표 는 메 인 키 명 등 모드 가 있어 야 합 니 다. 만능 이 아 닙 니 다. DDL 에 명 등 을 조작 할 수 없 는 것 을 제외 하고 필드 길이 에 따라 발생 하 는 오류 도 명 등 이 아 닙 니 다. (예 를 들 어 호스트 의 한 필드 는 char (20) 이 고 준비 기 는 char (10) 입 니 다.또 하나의 제한 은 표 에 메 인 키 가 있어 야 insert 의 명 등 설정 에 효과 가 있 습 니 다. insert 의 명 등 행 위 는 메 인 키 를 통 해 준비 기 에 중복 값 이 있 는 지 판단 하여 복사 작업 을 하 는 것 이기 때 문 입 니 다. 표 에 메 인 키 가 없 으 면 준비 기 는 명 등 을 설치 하 더 라 도 호스트 보다 더 많은 데 이 터 를 복원 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기