• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 1. Replication 구성
    1. Replication 설정 방법
    2. Replication Formats
    1. Statement-Based 및 Row-Based Replication의 장점 과 단점
    2. Row-Based Logging 및 복제 사용
    3. 바이너리 Logging의 안전 및 안전하지 않은 명령문의 판단
    3. 글로벌 트랜잭션 식별자를 사용하여 복제
    4. Replication 및 바이너리 Logging 옵션 과 변수
    5. 일반적인 Replication 관리 작업
    2. Replication 구현
    3. Replication 솔루션
    4. Replication Notes and Tips
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

17.1.2.3 바이너리 Logging의 안전 및 안전하지 않은 명령문의 판단

MySQL 복제의 문 '안전'는 명령문 기반 형식을 사용하여 문과 그 결과를 정확하게 복제 할 수 있는지 여부입니다. 이것이 문에 해당하는 경우 문은 안전이라고, 그렇지 않은 경우는 안전하지 않다고 말합니다.

일반적으로 문이 결정적이면 안전하며, 그렇지 않은 경우는 안전하지 않습니다. 그러나 특정 비 결정적 함수는 "안전하지 않은"것으로 간주하지 않습니다 (이 섹션 뒷부분의 안전하지 않은 것으로 간주되지 않는 비 결정적 함수 를 참조하십시오). 또한 부동 소수점 수학 함수 (하드웨어 의존)에서의 결과를 사용하는 문은 항상 안전하지 않은 것으로 간주됩니다 ( 섹션 17.4.1.12 "복제 및 부동 소수점 값" 을 참조하십시오).

안전 및 안전하지 않은 문 처리 문은 문이 안전한 것으로 간주되는지 여부에 따라, 그리고 바이너리 로깅 형식 (즉, binlog_format 의 현재 값)에 따라 다르게 처리됩니다.

  • 행 기반 로깅을 사용하는 경우, 안전 및 안전하지 않은 문의 취급에 차이가 없습니다.

  • 혼합 형식 로깅을 사용하는 경우 안전 않으면 플래그 된 문은 행 기반 형식을 사용하여 로그가 기록되고 안전한 것으로 간주 된 문은 명령문 기반 형식을 사용하여 로그가 기록됩니다.

  • 명령문 기반 로깅을 사용하는 경우 안전 않으면 플래그 된 문은이 결과에 경고를 생성합니다. 안전한 문은 정상적으로 로그가 기록됩니다.

안전 않으면 플래그 된 각 문은 경고를 생성합니다. 이전에는 이러한 문이 대량으로 마스터에서 실행 된 경우 오류 로그 파일이 매우 커질 수있었습니다. 이를 방지하기 위해 MySQL은 다음과 같이 작동 경고 억제 메커니즘 (MySQL 5.6.7에서 추가)를 제공합니다. 최근 50 ER_BINLOG_UNSAFE_STATEMENT 경고가 50 초 간격으로 50 회 초 생성 된 경우 경고 억제가 활성화됩니다. 활성화되어있는 때에는이를 통해이 같은 경고가 오류 로그에 기록되는 것은 아닙니다. 대신이 유형의 경고가 50 개 생성 될 때마다 (마지막 경고가 N 번 최근 S 초간 반복되어) 오류 로그에 기록됩니다. 50 개의 최근의이 같은 경고가 50 초 이내에 발행되는 한, 이것이 계속합니다. 주파수가이 임계 값 아래로 떨어지면 다시 정상적으로 경고가 기록됩니다. 경고 억제는 명령문 기반 로깅 문 안전이 어떻게 결정되는지 및 경고가 클라이언트에 어떻게 보낼지에 영향을주지 않습니다. MySQL 클라이언트는 계속 이러한 문마다 하나의 경고를받습니다.

자세한 내용은 섹션 17.1.2 "복제 형식" 을 참조하십시오.

안전하지 않은 것으로 간주되는 문 다음 특징을 가진 문은 안전하지 않은 것으로 간주됩니다.

  • 슬레이브로 다른 값을 반환 할 수있는 시스템 함수를 포함하는 문. 이 함수는 FOUND_ROWS() , GET_LOCK() , IS_FREE_LOCK() , IS_USED_LOCK() , LOAD_FILE() , MASTER_POS_WAIT() , PASSWORD() , RAND() , RELEASE_LOCK() , ROW_COUNT() , SESSION_USER() , SLEEP() , SYSDATE() , SYSTEM_USER() , USER() , UUID() , UUID_SHORT() 이 포함되어 있습니다.

    안전하지 않은 것으로 간주되지 않는 비 결정적 함수. 이 함수는 결정적인하지 않지만, 로깅 및 복제 목적의 경우 안전으로 처리됩니다 : CONNECTION_ID() , CURDATE() , CURRENT_DATE() , CURRENT_TIME() , CURRENT_TIMESTAMP() , CURTIME() , LAST_INSERT_ID() , LOCALTIME() ) LOCALTIMESTAMP() ) NOW() , UNIX_TIMESTAMP() ) UTC_DATE() ) UTC_TIME() 및 UTC_TIMESTAMP() .

    자세한 내용은 섹션 17.4.1.15 "복제와 시스템 함수" 를 참조하십시오.

  • 시스템 변수에 대한 참조 대부분의 시스템 변수는 명령문 기반 형식으로 제대로 복제되지 않습니다. 섹션 17.4.1.34 "복제 및 변수" 를 참조하십시오. 예외는 섹션 5.2.4.3 "혼합 형식의 바이너리 로깅 형식" 을 참조하십시오.

  • UDF UDF가 무엇을하는지는 제어 할 수 없기 때문에 그것이 안전하지 않은 문을 실행하고 있다고 추정해야합니다.

  • 트리거 또는 저장 프로그램은 AUTO_INCREMENT 컬럼을 가진 테이블을 업데이트한다. 행이 업데이트되는 순서가 마스터와 슬레이브로 다를 수 있기 때문에 이것은 안전하지 않습니다.

    또한 복합 기본 키를 가진 테이블이 복합 키의 선두 컬럼이 아닌 AUTO_INCREMENT 컬럼이 포함되는 테이블에 INSERT 하는 것은 안전하지 않습니다.

    자세한 내용은 섹션 17.4.1.1 "복제 및 AUTO_INCREMENT" 를 참조하십시오.

  • INSERT DELAYED 문이 문이 행 삽입이 병렬로 실행되는 문이 폐쇄 될 가능성이 있기 때문에 안전하지 않은 것으로 간주됩니다.

  • 여러 기본 키 또는 고유 키가있는 테이블에서 INSERT ... ON DUPLICATE KEY UPDATE 문 여러 기본 키 또는 고유 키가있는 테이블에 대해 실행될 때이 문은 안전하지 않은 것으로 간주됩니다 ( 스토리지 엔진이 키를 체크하는 순서에 취약하지만, 이것은 결정적 아니라 또한 MySQL Server가 업데이트되는 행의 선택이 이것에 의존하기 때문입니다).

    여러 고유 키 또는 기본 키가 테이블에 대한 INSERT ... ON DUPLICATE KEY UPDATE 문은 MySQL 5.6.6 이후의 문 기반 복제는 안전하지 않은 것으로 표시됩니다. (Bug # 11765650, Bug # 58637)

  • LIMIT를 사용하는 업데이트 행의 검색 순서가 지정되어 있지 않기 때문에 안전하지 않은 것으로 간주됩니다. 섹션 17.4.1.16 "복제 및 LIMIT" 를 참조하십시오.

  • 로그 테이블에 액세스하거나 참조 시스템 로그 테이블의 내용은 마스터와 슬레이브로 다를 수 있습니다.

  • 트랜잭션 작업 후 비 트랜잭션 작업 트랜잭션에서 트랜잭션 읽기 또는 쓰기 후 비 트랜잭션 읽기 또는 쓰기를 실행하는 것을 허용하는 것은 안전하지 않은 것으로 간주됩니다.

    자세한 내용은 섹션 17.4.1.31 "복제 및 트랜잭션" 을 참조하십시오.

  • 셀프 로깅 테이블에 액세스하거나 참조 셀프 로깅 테이블에 대한 모든 읽기 및 쓰기는 안전하지 않은 것으로 간주됩니다. 트랜잭션 내에서 자동 로깅 테이블에 대한 읽기 또는 쓰기에 오는 명령문도 안전하지 않은 것으로 간주됩니다.

  • LOAD DATA INFILE 문 MySQL 5.6 이상에서 LOAD DATA INFILE 는 안전하지 않은 것으로 간주 문 기반 모드에서 경고가 생성 된 혼합 형식 로깅 사용시 행 기반 형식으로 전환 원인이됩니다. 섹션 17.4.1.17 "복제 및 LOAD DATA INFILE" 를 참조하십시오.

자세한 내용은 섹션 17.4.1 "복제 기능 및 문제" 를 참조하십시오.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved