[관리] Mysql Replication DB 복제하기 [2]

mysql replicator 서버 세팅]

작성: 2001년 2월 20일 이홍기(genius@chonga.pe.kr)

문서버전: 0.2 draft

————————————————————————————————-

간단히 세팅해본 후에 세팅 및 주의할 점에 대한 정리라 볼수가 있겠다.

mysql 3.23.x 에서 지원하는 replication기능에 대해 알아보도록 한다.

우선, test라는 database의 replication을 위주로 설명한다.

/usr/local/mysql 이 mysql root라 가정한다.

[mysql replication 의 특징]

*. mysql replication 기능은 1 master node와 다수의 slave node를 지원하고 있으며

  각 노드간 암호화는 지원하지 않음(stunnel이용해야함)

*. master는 binary log를 지원하여 이를 slave에서 받아가서 갱신하는 형태로,

  slave node 자체에서 변경된 데이터는 master 에 반영되지 않음.

  sync는 binary log가 이루어진 시점부터 이루어지며, sync할 db에 대한 대상은

  포함 또는 제외가 설정에 의해 가능함.

*. AUTO_INCREMENT와 LAST_INSERT_ID, TIMESTAMP 등을 지원하지만, RAND()는 바로 지원하지

   않고, RAND(UNIX_TIMESTAMP()) 의 형태로는 제공하는 듯하다.

[mysql replication 명령어]

FLUSH MASTER or RESET MASTER

FLUSH SLAVE or RESET SLAVE

LOAD TABLE ‘tablename’ FROM MASTER

PURGE MASTER LOGS TO ‘log-name’

[mysql replication 설정]

master node

0. 돌고있던 mysql db를 죽인다. (master노드는 굳이 죽일 필욘 없다.)

1. user 등록

    *repl/qlalfqjsgh 유저를 등록

    #*GRANT FILE ON *.* TO repl@”%” IDENTIFIED BY ‘<password>’;

    *GRANT FILE ON *.* TO repl@”%” IDENTIFIED BY ‘qlalfqjsgh’;

    *mysqladmin flush-privileges

2. my.cnf에 다음을 추가한다.

   [mysqld]

   #for master node

   log-bin=/usr/local/mysql/data/replication.log

   binlog-do-db=test

   server-id=1

3. sync하고자하는 db data(여기서는 test)를 master노드에서 백업

4. mysql restart

slave node

0. 돌고있던 mysql db를 죽인다.

1. sync하고자하는 db data를 master노드에서 가져와서 db-data 디렉토리에 푼다.

3.  my.cnf에 다음을 추가한다.

   [mysqld]

   #for master node

   # for slave node

   server-id=2

   master-host=10.0.0.1

   master-user=repl

   master-password=qlalfqjsgh

   replicate-do-db=test

4. mysql restart

    /usr/local/mysql/data 에 master.info 가 생성되었나 본다.

[Replication Test]

master node에서

  $ mysql -uroot -p test

  mysql> show tables;

  +—————-+

  | Tables_in_test |

  +—————-+

  | test           |

  +—————-+

  1 rows in set (0.01 sec)

  mysql> select * from test;

  mysql> insert into test values (‘hongki’,1);  ## slavenode에도 싱크됨

  mysql> create table test2 (testid int not null primary key ) ; ## slave node에서도 싱크됨

  mysql> SET SQL_LOG_BIN=0;  # 이순간부터 sync안됨

  mysql> create table test3 (testid int not null primary key ) ; ## slave node에서 싱크안됨

  mysql> SET SQL_LOG_BIN=1; # 이순간부터 다시 sync됨

slave node에서 (위를 master노드에서 수행한 이후부터 수행했다고보면)

  $ mysql -uroot -p test

  mysql> show tables;

  +—————-+

  | Tables_in_test |

  +—————-+

  | test           |

  | test2          |

  +—————-+

  2 rows in set (0.01 sec)

  ## test3는 예고한 대로 싱크가 되지 않았음.

  mysql> LOAD TABLE test3 FROM MASTER  # table test3를 master node로부터 싱크한다.

  +—————-+

  | Tables_in_test |

  +—————-+

  | test           |

  | test2          |

  | test3          |

  +—————-+

  3 rows in set (0.01 sec)

  mysql>

  ## 싱크가 되었다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

3 Responses

  1. 2022년 6월 21일

    1prologue

  2. 2023년 1월 27일

    1broadband

페이스북/트위트/구글 계정으로 댓글 가능합니다.