달력

92019  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
  •  
  •  
  •  

mysql replication 사용....


데이터 복제는 두가지 설정으로 나누어 진다.

* master 설정
* slave 설정

mysql 은 이미 설치되어 있다는 전제하에 설명하며,

두대의 서버에 각각 설치되었다고 가정한다.

master 서버의 ip 는 111.111.111.111  로 가정하고
slave 서버의 ip 는 222.222.222.222 로 가정한다.


먼저 master 설정...


1. Master Server 에 새로운 사용자 등록...(권한은 all 로 했지만 Repl_slave_priv 만 준다고 함).
    (전체 데이터베이스 복제를 위해 *.* 로 한다..... 디비는 딱 세개 있음 ㅡㅡ)
 grant all on *.* to 'tornado'@'%' identified by '패스워드' with grant option;


 2. 권한을 줬으면 mysql 데이터베이스에 user 테이블에 현재 생성한 유져가 잘 들어있는지 체크한다.


 3. my.cnf 파일을 고쳐주어야 한다. 보통 mysql 설치후 /etc/ 디렉토리에 복사해 놓고 사용하는데
 없다면 MYSQL_HOME/support-files 디렉토리에 보면

-rw-r--r--    1 root     mysql        2686  6¿u  3 10:04 MySQL-shared-compat.spec
-rw-r--r--    1 root     mysql         773  6¿u  3 10:04 magic
-rw-r--r--    1 root     mysql        4874  6¿u  3 10:04 my-huge.cnf
-rw-r--r--    1 root     mysql        4850  6¿u  3 10:04 my-large.cnf
-rw-r--r--    1 root     mysql        4833  6¿u  3 10:04 my-medium.cnf
-rw-r--r--    1 root     mysql        2418  6¿u  3 10:04 my-small.cnf
-rwxr-xr-x    1 root     mysql       24917  6¿u  3 10:04 mysql-4.0.17.spec
-rwxr-xr-x    1 root     mysql         676  6¿u  3 10:04 mysql-log-rotate
-rwxr-xr-x    1 root     mysql        5432  6¿u  3 10:04 mysql.server
-rw-r--r--    1 root     mysql       24917  6¿u  3 10:04 mysql.spec


이렇게 파일이 존재한다.

이중에... my-small.cnf 를 /etc/my.cnf 로 복사한다.

cp my-small.cnf /etc/my.cnf

4. vi 로 /etc/my.cnf 를 열어본다...

# vi /etc/my.cnf    로 보면 아래와 같은 부분이 있다.

log-bin
server-id     = 1


이 부분이 주석처리 되면 안되며, server-id 는 master 서버와 slave 서버 사이에서 유일한 값이어야 한다.


6. Database 및 Table 생성

mysql 에는 test 디비가 있는데 그곳에 아래와 같이 테이블을 만든다.

create table a ( name varchar(50) );


7. Database 복사.

위에처럼 생성했다면 mysql/data/test 디렉토리에 a 테이블에 관련된 세개의 파일이 생성된다.

그럼 해당 Table 을 무식하게(?) 압축해서 slave 의 test 디렉토리로 이동한다.

[root@localhost data]# tar cvzf test.tar.gz ./test
./test/
./test/a.frm
./test/a.MYI
./test/a.MYD
You have new mail in /var/spool/mail/root
[root@localhost data]#


압축된 파일을 slave 서버의 mysql/data/ 디렉토리에 옮긴후 압축을 푼다.

# tar xvzf test.tar.gz


이제 Slave 서버 셋팅이다.



1.  my.cnf 파일 수정하기..

master 서버의 my.cnf 를 복사한 것과 같은 방법으로 /etc/my.cnf 를 만들어 준다.

# vi /etc/my.cnf

파일을 보다가 server-id = 1 이라고 되어있는 부분이 있으면
server-id = 2 로 바꾸어 준다.

아래와 같이 master 서버의 주소와 사용자를 적어준다.

# Replication Configure
master-host=111.111.111.111
master-user=tornado
master-password=패스워드
master-port=3306


2. mysql 데몬 다시 시작하기.

master 서버 및 slave 서버의 데몬을 다시 시작한다.


./bin/safe_mysqld --user=mysql &


3. master 서버에서의 상태 보기.

show master status;

위 명령을 치면 master 서버의 상태를 보여준다.
그곳에 보이는 파일과 slave 에서 보이는 파일이 동일해야 한다.


4. slave 서버에서의 상태보기.

show slave status;

위 명령을 치면 master 와는 틀리게 컬럼이 좀 여러개가 보인다.

그중에 master 에 적혀 있는 파일이 정확하게 있는지 확인한다.

만약 없다면 slave 의 data/ 디렉토리에 있는 모든 파일(디렉토리는 빼고!!!) 을 싹 지운다.
보통 xxx-bin 과 같은 파일일 것임..


만약 컬럼 중간에 에러 비스무리한 것이 있다면... 잘 읽어보라.


5. slave 서버 시작/중지하기.

slave start ;  <-- 슬레이브 시작하기
slave stop ;  <-- 슬레이브 중지하기..


이렇게 중지해도 양쪽의 로그파일이 있기 때문에 
중간에 중단되었다 해도 중단된 시점부터 다시 백업해준다.


6. 테스트


master 서버의 test 디비에서 아까 만들었던 a 테이블에 쿼리를 날려본다.

insert into a values('tornado');


마스터/슬레이브 서버에서 각각 select * from a; 를 해보고

데이터가 동일한지 확인해서 같으면 끝...



7. 문제점???

pk 컬럼의 중복 및 짜잘한 오류가 생겼을 경우 slave 가 죽는 현상이 벌어짐 ㅡㅡ
해결책 ... 모름.. 아시는 분 덧글 부탁 ^^




Posted by Tornado tornado