반응형

출처 : http://minsql.com/mysql/mysql-5-6-gtid-replication-manadatory-options/

ref : http://dev.mysql.com/doc/refman/5.6/en/replication-gtids-howto.html
에 따르면 간단히 다음과 같이 정리할 수 있습니다.


GTID(global transactio identifier)를 사용하기 위한 필수옵션은 다음 네가지입니다. Master, Slaves 모두 (적어도) 네가지 옵션이 주어져야합니다.
shell> mysqld_safe –gtid_mode=ON –log-bin –log-slave-updates –enforce-gtid-consistency &
–gtid-mode는 ON/OFF 값을 주어야합니다. 0/1 사용하지 마세요.

Options
Comments
–gtid_mode=ON

GTID 쓸꺼면 ON하면 됩니다. enumeration이라니 아마도 ON/OFF외에 다른 값도 받을수 있는듯. 살펴봅시다.
–log-bin
이것도 물론 켜야겠죠.
–log-slave-updates
이거 살짝 curious하네요. 지금까지는 chained replication 구성할때 사용했었는데요. 살펴봅시다.
–enforce-gtid-consistency
gtid 쓰면 unsafe 케이스가 있나봅니다. 살펴봅시다.


  1. gtid_mode=ON
    • Introduced5.6.5
      Command-Line Format--gtid-mode=MODE
      System Variable Namegtid_mode
      Variable ScopeGlobal
      Dynamic VariableNo
      Permitted Values
      Typeenumeration
      DefaultOFF
      Valid ValuesOFF
      UPGRADE_STEP_1
      UPGRADE_STEP_2
      ON
    • 물론 global 변수고, dynamic아니고, 네가지 값을 가질수 있네요.
    • ON/OFF할때 주의해야합니다. 실행중이던 트랜잭션이 남아있던 경우에 이 옵션이 켜지거나 꺼지면 문제가 될수 있다고 합니다.
    • Boolean아니니 0/1주면 안됩니다. UPGRADE_STEP_1 , UPGRADE_STEP_2 은 지금은 사용안되고 추후에 추가될 예정이라고합니다. 지금 버젼에서는 이 두개 쓰면 startup 실패합니다.
    • 버젼별 주의사항(gtid_mode=ON일때) 
      • MySQL 5.6.7 미만 : mysql_upgrade 사용안됨, mysql_upgrade하려면 –skip-write-binlog을 명시해야함.
      • MySQL 5.6.7 이후 : mysql_upgrade 실행가능하지만 MyISAM을 사용하는MySQL system tables에 영향이 있을 수 있으므로 사용하지 않는 것이 좋다. (–write-binlog가 default였는데 5.6.7이후부터 –skip-write-binlog가 default임)
      • MySQL 5.6.10 미만 : sql_slave_skip_couter=1 을 설정이 동작하지 않음. slave position을 넘기기 위해서는 CHANGE MASTER TO … MASTER_LOG_FILE = …, MASTER_LOG_POS = …, MASTER_AUTO_POSITION = 0 를 사용해야함.
  2. log-bin
    • Enable binary logging
  3. log-slave-updates
    • slave binlog에 master로 부터 받은 변경사항도 쓰도록 하는 옵션.
    • gtid-mode에서 log-slave-updates를 사용하지 않으면 다음과 같은 에러가 발생한다고 합니다.
    • Master와 Slave binlog에 같은 GTID가 기록되기 때문에 slave는 자신이 최근 적용한 GTID를 가지고 master의 position을 찾아갈수 있음. 즉, auto-positioning을 위해서는 –log-slave-updates가 반드시 활성화되어야함.
  4. enforce-gtid-consistency
    • Introduced5.6.9
      Command-Line Format--enforce-gtid-consistency[=value]
      System Variable Nameenforce_gtid_consistency
      Variable ScopeGlobal
      Dynamic VariableNo
      Permitted Values
      Typeboolean
      Defaultfalse
    • transsactionally safe한 문장만 실행을 허용한다.
    • GTID 모드를 사용하기 전에 이 옵션을 켜서 테스트해볼수 있습니다.
    • transactionally safe한 문장이 어떤걸까. unsafe하다는 걸 보면 알수 있을지도 모르겠네요.
    • 허용되지 않는 문장.
      • CREATE TABLE … SELECT statements
      • CREATE TEMPORARY TABLE statements inside transactions
      • Transactions or statements that update both transactional and nontransactional tables
    • 버젼별 주의사항(enforce-gtid-consistency)
      • MySQL 5.6.9 미만 : 옵션 이름이 –disable-gtid-unsafe-statements 이었음.
      • MySQL 5.6.7 미만 : 이 옵션을 사용하면 temporary tables에 대한  nontransactional DML문이 실패했었음. 심지어 row-based binary logging 사용 환경에서 temporary tables가 로깅될 필요가 없는 경우에도 에러를 발생했었음.
      • MySQL 5.6.7 이후: –disable-gtid-unsafe-statements ( MySQL 5.6.9 이후, –enforce-gtid-consistency) 을 사용하면 temporary tables에 대한  nontransactional DML문이 허용됨
      • MySQL 5.6.7 미만 : mysql_upgrade 사용안됨, mysql_upgrade하려면 –skip-write-binlog을 명시해야함.
      • MySQL 5.6.7 이후 : mysql_upgrade 실행가능하지만 MyISAM을 사용하는 MySQL system tables에 영향이 있을 수 있으므로 사용하지 않는 것이 좋다. (–write-binlog가 default였는데 5.6.7이후부터 –skip-write-binlog가 default임)
      • MySQL 5.6.9 미만 : –disable-gtid-unsafe-statements을 사용하면 nontransactional tables(MyISAM) 에 대한 변경이 불가능했음
      • MySQL 5.6.9 이후 : nontransactional tables(MyISAM) 에 대한 single statement는 가능함.


반응형

'연구개발 > MYSQL' 카테고리의 다른 글

slave 데이터 불일치 시  (0) 2015.04.02
MySQL Database(DB)별로 백업하는 쉘 스크립트  (0) 2015.04.01
MySQL MHA(Master High Availability)  (0) 2015.03.24
mysqlbinlog  (0) 2015.03.24
percona-toolkit 설치  (0) 2015.03.19

+ Recent posts