티스토리 뷰

Linux

MySQL Replicaton

덕쑤 2015. 3. 19. 18:12

출처 : http://hys9958.tistory.com/entry/mysql-%EC%9D%B4%EC%A4%91%ED%99%94-master-slave%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0#recentTrackback


MySQL Replicaton 은 DB 서버를 여러대 두고 웹서버로 부터의 접속(쿼리, select)을 분산 시켜

DB서버의 부하를 줄이는 방법입니다.

slave 서버에서 master 서버의 바이너리 로그파일을 참조하여 업데이트 하므로,

slave 서버에 로그인하여 DB를 update 하면 동기화가 되지 않으니

slave 서버는 select 용도로만 사용을 해야 합니다.

 

본 메뉴얼 작성시 테스트 버전은 MySQL 5.1.34 입니다.

두대의 MySQL 버전이 다를 경우, slave 서버의 버전이 더 높아야 합니다.

(버전에 따라 점차 기능이 많아 지므로..)

 

최대한 간단히 작성하려 하였습니다.

순서대로 따라만 하시면 누구나 손쉽게 구축이 가능합니다. ^^

 

 

1. master 서버 설정

mysql 설정 파일을 열어 아래 두개 항목이 사용중인지 확인합니다.

 

vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin

server-id   = 1           <- 서버 고유 번호이므로 slave 서버와 같으면 안됩니다.

 

저장 후, mysql 을 재시작 해줍니다.

/etc/init.d/mysqld restart

 

mysql 에 로그인하여 slave 서버에서 접속할 사용자 생성을 합니다.

 

mysql -p

(mysql root 패스워드 입력)

mysql> use mysql;

mysql> grant replication slave on *.* to 'repluser'@'192.168.0.10' identified by 'neulwonpassword';

 

※ repluser : mysql 접속 계정

    192.168.0.10 : slave 서버 IP 입니다. 여기서는 지정한 IP 에서만 접속되게 설정하였습니다.

    neulwonpassword : 접속계정의 패스워드 입니다.

 

 

2. slave 서버 설정

mysql 설정 파일을 열어 아래 두개 항목이 사용중인지 확인합니다.

 

vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin

server-id   = 2           <- 서버 고유 번호이므로 master 서버와 같으면 안됩니다.

 

저장 후, mysql 을 재시작 해줍니다.

/etc/init.d/mysqld restart

 

 

3. 동기화 작업 

1차적으로 master 서버의 MySQL data 폴더를 master 서버로 복사 해옵니다.

dump 로 가져오셔도 되고, rsync 로 복사해오셔도 됩니다. (rsync는 MySQL 버전이 같을때만 사용합니다.)

방법은 본 메뉴얼에서 생략합니다. (메뉴얼 필요시 링크 참조)

 

dump 방법 :

백업하기
1) DB별로 백업
mysqldump -u root -p DB명 > 파일명.sql
암호입력 (Enter)

2) 전체 백업
mysqldump -u root -p --all-databases > 파일명.sql
암호입력 (Enter)

3) 캐릭터셋 옵션을 이용하여 백업
mysqldump -u root -p --default-character-set=euckr DB명 > 파일명.sql
암호입력 (Enter)
(euckr, utf8 등이 있음)

4) 특정 테이블만 덤프
mysqldump -u root -p DB명 테이블명 > 파일명.sql
mysqldump -u root -p -B DB명 --tables 테이블명1 테이블명2 테이블명3 > 파일명.sql

5) 테이블 구조만 백업

mysqldump -u root -p --no-data DB명 > 파일명.sql

 

6) XML 파일로 백업

mysqldump -u root -p --xml DB명 > 파일명.sql



복구 하기
1) DB별로 복구
mysql -u root -p DB명 < 파일명.sql
암호입력 (Enter)

2) 전체 복구
mysql -u root -p < 파일명.sql
암호입력 (Enter)

3) 캐릭터셋 옵션을 이용하여 백업 복구
mysqldump -u root -p --default-character-set=euckr DB명 < 파일명.sql
암호입력 (Enter)

(euckr, utf8 등이 있음) 

출처 : http://system.neulwon.com/xe/243

rsync 방법 : http://system.neulwon.com/xe/170

 

data 복사가 되었으면, master 서버의 mysql 에 로그인 하여 로그 파일 상태를 확인합니다.

 

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000010 |      813 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

 

이제 slave 서버의 mysql 에 로그인 하여 지정한 로그부터 연동이 되게 설정합니다.

 

mysql> change master to master_host='192.168.0.9', master_user='repluser', master_port=3306,master_password='neulwonpassword', master_log_file='mysql-bin.000010', master_log_pos=813;

 

※ 192.168.0.9 : master 서버 IP 입니다.

    mysql-bin.000010 : master 서버에서 확인한 바이너리 로그파일명 입니다.

    813 : master 서버에서 확인한 바이너리 파일의 최종 쿼리 위치 입니다.

             여기서부터 master 서버에 쿼리 발생시 slave 서버도 같이 동작합니다.

 

 

4. 테스트

master 서버에서 테이블을 한개 생성합니다.

 

mysql> use test;

mysql> create table neulwon ( no int(8), primary key (no) );

mysql> show tables;

 

slave 서버에서도 같은 database (test) 에 neulwon 이라는 table 이 생성된것을 확인할 수 있습니다.

slave 서버에서 확인해봅니다. 

 

mysql> show tables;

 

같은 형식으로 여러대(1:N)의 replication 을 구성할 수 있으며, (주의 : my.cnf 파일의 server-id 만 각각 다르게 설정)

MySQL 구동 순서는 master 서버, slave 서버 순입니다.

 

 

※ 참고

위와같이 설정 완료 후에도 replication 이 동작하지 않는다면 slave 서버에서 아래와 같이 재설정을 해봅니다.

mysql> slave stop;
mysql> reset slave;

mysql> change master to master_host='192.168.0.9', master_user='repluser', master_port=3306,master_password='neulwonpassword', master_log_file='mysql-bin.000010', master_log_pos=1050;    // 새로운 log 번호
mysql> slave start;

'Linux' 카테고리의 다른 글

Kickstart file analysis  (0) 2015.03.31
리눅스 기본 port number  (0) 2015.03.26
[LINUX : Permission] chmod, chown, chgrp, chattr, lsattr  (0) 2015.02.07
Embedded system을 위한 linux 최적화 기술  (0) 2014.08.20
clock_gettime  (0) 2014.08.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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 31
글 보관함