반응형
출처 : 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한 케이스가 있나봅니다. 살펴봅시다. |
- gtid_mode=ON
Introduced 5.6.5 Command-Line Format --gtid-mode=MODE
System Variable Name gtid_mode
Variable Scope Global Dynamic Variable No Permitted Values Type enumeration
Default OFF
Valid Values OFF
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 를 사용해야함.
- log-bin
- Enable binary logging
- log-slave-updates
- slave binlog에 master로 부터 받은 변경사항도 쓰도록 하는 옵션.
- gtid-mode에서 log-slave-updates를 사용하지 않으면 다음과 같은 에러가 발생한다고 합니다.
- Master와 Slave binlog에 같은 GTID가 기록되기 때문에 slave는 자신이 최근 적용한 GTID를 가지고 master의 position을 찾아갈수 있음. 즉, auto-positioning을 위해서는 –log-slave-updates가 반드시 활성화되어야함.
- enforce-gtid-consistency
Introduced 5.6.9 Command-Line Format --enforce-gtid-consistency[=value]
System Variable Name enforce_gtid_consistency
Variable Scope Global Dynamic Variable No Permitted Values Type boolean
Default false
- 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 |