Differences between revisions 11 and 13 (spanning 2 versions)
Revision 11 as of 2019-06-07 13:19:41
Size: 3118
Editor: 정수
Comment:
Revision 13 as of 2019-06-07 13:24:16
Size: 3663
Editor: 정수
Comment:
Deletions are marked like this. Additions are marked like this.
Line 56: Line 56:
mmm_control show; mmm 도구가 좋아보이기는 하는데, 이렇게 제대로 사용하려면 DB용 서버가 따로 있어야 할 것 같다. 지금 리트머스 구성은 switch 1대, server1, server2 이렇게인데, 원래 제안했던대로 switch, webserver1, webserver2, db1, db2 이렇게 구성되어야 mmm에 어울리는 구성인 것 같다. mmm은 IP를 switch하는 방식으로 동작한다고 하니.
Line 61: Line 61:
 * [[https://www.digitalocean.com/community/tutorials/how-to-set-up-mysql-master-master-replication|How to Setup MySQL Master-Master Replication]]: deprecated method.  * [[https://www.digitalocean.com/community/tutorials/how-to-set-up-mysql-master-master-replication|How to Setup MySQL Master-Master Replication]]: deprecated method. but would still work.
Line 64: Line 64:
Group Replication 방식이 더 선호되는 것 같다. 하지만 ansible script로 간단히 구축될 것 같아보이지 않는다.

Replication

GTID란?

MySQL GTID 시작하기

  • 5.6 버전까지 GTID를 사용하기 위해서는 복제 그룹의 모든 DB가 log-bin, log-slave-updates 옵션을 사용해야 한다.
  • GTID 컨셉은, '누구나 Master가 될 수 있다'라는 것이다.
  • 5.7 버전부터는 log-bin, log-slave-updates 옵션의 사용이 필수가 아니지만, master 역할을 부여받을 가능성이 있는 DB는 반드시 log-bin, log-slave-updates 옵션을 켜야 한다.

개념

  • GTID
  • GTID Set
  • Executed GTID
    • 초기화 된 후 실행된 GTID set. gtid_executed 시스템 변수에서 확인 가능함.
    • Master 입장에서는 자신의 GTID 발급 현황을, Slave 입장에서는 Master의 트랜잭션이 어디까지 반영되었는지 의미.
    • > SHOW GLOBAL VARIABLES LIKE 'gtid_executed';

  • Purged GTID

slave에서 GTID set이 유실된 경우, 그리고 master에서도 purge되고 남아있지 않은 경우:

  • Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.

누락된 트랜잭션을 Empty 트랜잭션으로 Skip 처리하거나:

  • slave> STOP SLAVE SQL_THREAD;

  • slave> SET GTID_NEXT='9d850d65-219f-11e6-b652-08002702c825:113';

  • slave> BEGIN; COMMIT;

  • slave> SET GTID_NEXT='AUTOMATIC';

  • slave> START SLAVE SQL_THREAD;

또는 slave의 gtid_executed 값을 적절히 변경

  • slave> STOP SLAVE SQL_THREAD;

  • slave> SHOW GLOBAL VARIABLES LIKE 'gtid_executed';

  • -> 9d850d65-219f-11e6-b652-08002702c825:285 ...

  • slave > RESET MASTER;

  • slave> SET GLOBAL GTID_PURGED=9d850d65-219f-11e6-b652-08002702c825:1-285;

  • slave> START SLAVE SQL_THREAD;

GTID_EXECUTED 시스템 변수는 READ ONLY이다. 따라서 GTID_PURGED를 활용한다. RESET MASTER를 하면 GTID가 초기화된다.

  • mysql> RESET MASTER;

  • mysql> SET GLOBAL GTID_PURGED='9d850d65-219f-11e6-b652-08002702c825:1-2000;

MMM

replication에 관련한 생활코딩 강의가 있네.

Multi-Master Replication Manager for MySQL (mmm). MySQL의 replication monitoring manager tool.

mmm 도구가 좋아보이기는 하는데, 이렇게 제대로 사용하려면 DB용 서버가 따로 있어야 할 것 같다. 지금 리트머스 구성은 switch 1대, server1, server2 이렇게인데, 원래 제안했던대로 switch, webserver1, webserver2, db1, db2 이렇게 구성되어야 mmm에 어울리는 구성인 것 같다. mmm은 IP를 switch하는 방식으로 동작한다고 하니.

Digital Ocean 글

Group Replication 방식이 더 선호되는 것 같다. 하지만 ansible script로 간단히 구축될 것 같아보이지 않는다.

Online Migration

TokuDB는 online migration을 지원하는 MySQL 엔진이다. Commercial로 판매함.

Online migration tools

MySQL (last edited 2019-06-08 08:02:21 by 정수)