• 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 구성
    2. Replication 구현
    3. Replication 솔루션
    4. Replication Notes and Tips
    1. Replication 기능과 이슈
    1. Replication and AUTO_INCREMENT
    2. Replication and BLACKHOLE 테이블
    3. Replication and Character Sets
    4. CREATE ... IF NOT EXISTS 문 복제
    5. CREATE TABLE ... SELECT 문 복제
    6. CREATE SERVER, ALTER SERVER 및 DROP SERVER 복제
    7. CURRENT_USER ()의 복제
    8. DROP ... IF EXISTS 문 복제
    9. 테이블 정의가 다른 마스터와 슬레이브에 복제
    10. Replication and DIRECTORY Table Options
    11. 호출되는 기능의 복제
    12. 복제 및 부동 소수점 값
    13. 복제 및 소수 초 지원
    14. 복제 및 FLUSH
    15. 복제와 시스템 함수
    16. 복제 및 LIMIT
    17. 복제 및 LOAD DATA INFILE
    18. 복제 및 REPAIR TABLE
    19. 복제 및 마스터 또는 슬레이브 Shutdowns
    20. 복제와 max_allowed_pa​​cket
    21. 복제 및 MEMORY 테이블
    22. 복제 및 임시 테​​이블
    23. mysql 시스템 데이터베이스의 복제
    24. 복제 및 쿼리 최적화
    25. 복제 및 예약어
    26. 복제중인 슬레이브 오류
    27. 서버 측 도움말 테이블의 복제
    28. Replication 및 서버 SQL 모드
    29. Replication 시도 및 시간 제한
    30. Replication 및 Time Zones
    31. Replication 및 트랜잭션
    32. Replication 및 트리거
    33. Replication 및 TRUNCATE TABLE
    34. Replication 및 변수
    35. Replication 및 Views
    2. MySQL 버전 간의 복제 호환성
    3. Replication 설정 업그레이드
    4. Replication 문제 해결
    5. Replication 버그 또는 문제를보고하는 방법
  • 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.4.1.31 복제 및 트랜잭션

같은 트랜잭션에 트랜잭션 및 비 트랜잭션 문을 혼합 일반적으로 복제 환경에서 트랜잭션 및 비 트랜잭션 테이블을 모두 업데이트하는 트랜잭션은 피해야한다. 트랜잭션 (또는 임시) 및 비 트랜잭션 테이블 모두에 액세스하고 그들에게 쓸 문을 사용하는 것도 피해야한다.

MySQL 5.5.2 이후에서는, 서버는 바이너리 로그에 다음 규칙을 사용합니다.

  • 트랜잭션의 첫 번째 문이 비 트랜잭션 인 경우, 그들은 즉시 바이너리 로그에 기록됩니다. 트랜잭션의 나머지 문은 캐시 된 트랜잭션이 커밋 될 때까지 바이너리 로그에 기록되지 않습니다. (트랜잭션이 롤백 된 경우 캐시 된 문은 롤백 할 수없는 비 트랜잭션 변경을 할 경우에만 바이너리 로그에 기록됩니다. 그렇지 않으면 그들은 파괴됩니다.)

  • 명령문 기반 로깅의 경우 비 트랜잭션 문 로깅은 binlog_direct_non_transactional_updates 시스템 변수에 의해 영향을받습니다. 이 변수가 OFF 의 경우 (디폴트), 로깅은 위와 같이됩니다. 이 변수가 ON 의 경우 비 트랜잭션 문이 트랜잭션의 어디에서 발생하더라도 (첫 번째 비 트랜잭션 문뿐만 아닙니다) 즉시 로깅이 발생합니다. 다른 문은 트랜잭션 캐시에 보관 된 트랜잭션이 커밋 할 때 로그가 기록됩니다. binlog_direct_non_transactional_updates 행 형식 또는 혼합 형식 바이너리 로깅에 영향을주지 않습니다.

트랜잭션 비 트랜잭션 및 혼합 문 이러한 규칙을 적용하는 경우, 서버는 비 트랜잭션 테이블 만 변경하는 경우에는 문을 비 트랜잭션으로 간주하고 트랜잭션 테이블 만 변경하는 경우에는 거래로 간주합니다. MySQL 5.6에서는 비 트랜잭션 및 트랜잭션 테이블을 모두 참조하여 사용되는 모든 테이블을 업데이트하는 문은 "혼합"문 간주됩니다. (이전의 MySQL 릴리즈 시리즈는 비 트랜잭션 및 트랜잭션 테이블 모두를 변경하는 문이 혼합 간주되어있었습니다.) 혼합 문은 트랜잭션 문과 마찬가지로 캐시 된 트랜잭션이 커밋 할 때 로그 이 기록됩니다.

트랜잭션 테이블을 업데이트하는 혼합 문은 다음 조치 중 하나를 수행하는 경우도 안전하지 않다고 간주됩니다.

  • 트랜잭션 테이블을 업데이트하거나 읽을

  • 비 트랜잭션 테이블을 읽기 트랜잭션 격리 수준이 REPEATABLE_READ 미만

트랜잭션에서 트랜잭션 테이블 업데이트에 계속 혼합 문은 다음 작업 중 하나를 수행 할 때 안전하지 않은 것으로 간주됩니다.

  • 테이블을 업데이트하고 임시 테​​이블에서 읽을

  • 비 트랜잭션 테이블을 업데이트하고 binlog_direct_non_trans_update가 OFF

자세한 내용은 섹션 17.1.2.3 "바이너리 로그에서의 안전 및 안전하지 않은 문의 판단" 을 참조하십시오.

참고

혼합 문은 혼합 바이너리 로깅 형식과는 관계가 없습니다.

트랜잭션에서 트랜잭션 및 비 트랜잭션 테이블에 업데이트가 혼재하고있는 상황에서 바이너리 로그의 문 순서는 제대로 필요한 모든 문이 바이너리 로그에 기록됩니다 ( ROLLBACK 의 경우에도). 그러나 첫 번째 연결 트랜잭션이 완료되기 전에 두 번째 연결이 비 트랜잭션 테이블을 업데이트 할 때 문이 기록되는 순서가 흐트러지는 경우가 있습니다. 첫 번째 연결에 의해 실행되는 트랜잭션의 상태에 관계없이 두 번째 연결 업데이트가 실행 된 직후에 기록되기 때문입니다.

마스터와 슬레이브로 다른 스토리지 엔진을 사용하는 슬레이브에 비 트랜잭션 테이블을 사용하여 마스터에서 트랜잭션 테이블을 복제 할 수 있습니다. 예를 들어, InnoDB 마스터 테이블을 MyISAM 슬레이브 테이블로 복제 할 수 있습니다. 그러나 이렇게 할 경우, 슬레이브가 BEGIN 블록의 처음에서 다시 시작했기 때문에 BEGIN ... COMMIT 블록의 중간에 슬레이브가 정지 한 경우 문제가 발생합니다.

MySQL 5.6에서는 마스터의 MyISAM 테이블에서 슬레이브에서 트랜잭션 테이블 ( InnoDB 스토리지 엔진을 사용하는 테이블 등)에 트랜잭션을 복제 할 안전합니다. 이 같은 경우 (MySQL 5.5.0 이후) 마스터에서 발행 된 AUTOCOMMIT=1 문이 복제되고 슬레이브에서 AUTOCOMMIT 모드가 적용됩니다.

슬레이브의 스토리지 엔진 타입이 아닌 트랜잭션의 경우, 트랜잭션 및 비 트랜잭션 테이블에 업데이트가 혼재하는 마스터 트랜잭션은 마스터 트랜잭션 테이블과 슬레이브 비 트랜잭션 테이블 간의 데이터 불일치가 발생할 가능성이있다 때문에 피해야한다. 즉, 이러한 트랜잭션 복제 동기화를 잃고, 마스터 스토리지 엔진 자체의 동작이 될 가능성이 있습니다. 현재 MySQL은 이에 대해 경고를 발행하지 않기 때문에 트랜잭션 테이블을 마스터에서 슬레이브에 비 트랜잭션 테이블에 복제 할 때는 충분히주의하도록합니다.

트랜잭션 내에서 바이너리 로깅 형식을 변경하는 MySQL 5.5.3 이후에서는 트랜잭션이 진행 중일 때는 binlog_format 시스템 변수는 읽기 전용입니다. (Bug # 47863)

각 트랜잭션 ( autocommit 트랜잭션을 포함)은 BEGIN 문으로 시작하고 COMMIT 또는 ROLLBACK 문으로 끝나는 것처럼 바이너리 로그에 기록됩니다. MySQL 5.6에서는이 진실이 아닌 트랜잭션 스토리지 엔진 ( MyISAM 등)를 사용하는 테이블에 영향을 미치는 문에도 적용됩니다.

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