MySQL Replication (리플리케이션)
MySQL Replicaton 은 DB 서버를 여러대 두고 웹서버로 부터의 접속(쿼리, select)을 분산 시켜
DB서버의 부하를 줄이는 방법입니다.
slave 서버에서 master 서버의 바이너리 로그파일을 참조하여 업데이트 하므로,
slave 서버에 로그인하여 DB를 update 하면 동기화가 되지 않으니
slave 서버는 select 용도로만 사용을 해야 합니다.
두대의 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 'sysdocu1234';
※ repluser : 리플리케이션 설정 목적을 위한 mysql 계정
192.168.0.10 : slave 서버 IP 입니다. 여기서는 지정한 IP 에서만 접속되게 설정하였습니다.
sysdocu1234 : 접속계정의 패스워드 입니다.
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 버전이 같을때만 사용합니다.)
방법은 본 메뉴얼에서 생략합니다.
MySQL의 경우 data 디렉토리에 로그파일도 존재 하지만 Ubuntu 의 MariaDB 사용시
data 및 log 디렉토리가 별도 존재 하므로 두개의 디렉토리를 각각 전송 해주어야 합니다.
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> stop slave;
mysql> reset slave;
mysql> change master to master_host='192.168.0.9', master_user='repluser', master_port=3306, master_password='sysdocu1234', master_log_file='mysql-bin.000010', master_log_pos=813;
mysql> start slave;
※ 192.168.0.9 : master 서버 IP 입니다.
mysql-bin.000010 : master 서버에서 확인한 바이너리 로그파일명 입니다. MariaDB는 파일명이 다르니 잘 보고 입력해야 합니다.
813 : master 서버에서 확인한 바이너리 파일의 최종 쿼리 위치 입니다.
여기서부터 master 서버에 쿼리 발생시 slave 서버도 같이 동작합니다.
4. 테스트
master 서버에서 테이블을 한개 생성합니다.
mysql> use test;
mysql> create table sysdocu ( no int(8), primary key (no) );
mysql> show tables;
slave 서버에서도 같은 database (test) 에 sysdocu 이라는 table 이 생성된 것을 확인할 수 있습니다.
slave 서버에서 확인해봅니다.
mysql> show tables;
같은 형식으로 여러대(1:N)의 replication 을 구성할 수 있으며, (주의 : my.cnf 파일의 server-id 만 각각 다르게 설정)
MySQL 구동 순서는 master 서버, slave 서버 순입니다.
* 참고 (테스트 결과)
1) slave 서버 재구동 시 : replication 유지
2) master 서버 재구동 시 : replication 해제
3) slave 서버 리부팅 되는 동안 master 데이터 변경 된 것은 slave 서버가 부팅 완료되고 자동으로 sync 맞춰짐
'리눅스 > MySQL' 카테고리의 다른 글
MySQL 부하 체크 Slow Query // mysql_slow_log_filter , parser (0) | 2015.01.16 |
---|---|
mysql 두개 동시에 사용하기 (0) | 2015.01.16 |
[oracle] oracle 구동 (0) | 2015.01.16 |
mysql 로그인 상태에서 외부 파일 실행 (0) | 2015.01.16 |
DB이전 후, mysql_connet() 오류 발생 조치 (0) | 2015.01.16 |