Posted on 2004/06/16 10:06
Filed Under 데이터베이스/MYSQL 조회수: view 4983

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>
  ## 싱크가 되었다.
Writer profile
author image
-아랑 -
2004/06/16 10:06 2004/06/16 10:06

트랙백 주소 : 이 글에는 트랙백을 보낼 수 없습니다

About

by 서진우
Twitter :@muchunalang

Counter

• Total
: 4284637
• Today
: 836
• Yesterday
: 1591