설치환경
마스터서버
192.168.88.138
슬레이브서버
192.168.88.139
Centos 6.9
동일 mysql 설치
마스터서버 설정
# vi /etc/my.cnf
[mysqld]
log-bin
server-id=1
슬레이브서버 설정
# vi /etc/my.cnf
[mysqld]
master-host=192.168.88.138 // 마스터서버 아이피
master-user=test // 리플리케이션계정
master-password=testforever // 리플리케이션계정 비밀번호
master-port=3306 // 마스터서버 mysql포트
server-id=2 // server-id 지정
설정부분에서 중요한 것은 접속계정이다.
슬레이브에서 리플리케이션 계정을 생성해주면 마스터서버에서 다음과 같이 계정설정을 해주어야한다.
grant replication slave on *.* to 'test'@'%' identified by 'testforever';
설정완료 후 마스터서버와 슬레이브서버의 mysql를 재시작한다.
다수의 슬레이브서버를 구축하고 싶으시면 server-id를 늘려서 설정가능하다.
단 동일 server-id설정은 안됨.
마스터서버와 슬레이브서버의 데이터동기화
mysql서비스를 중지시키고 마스터서버와 슬레이브서버의 데이터를 동기화 시켜줍니다.
(rsync,mysqldump 등)
동기화서비스 실행
모든 설정이 완료되었으면 mysql 서비스를 올리고 테스트를 진행한다.
마스터서버 (mysql)
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000005 | 551 | | |
+-------------------+----------+--------------+------------------+
슬레이브서버(mysql)
mysql> show slave status\G
* 1. row *
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.88.138
Master_User: test
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqld-bin.000005
Read_Master_Log_Pos: 551
Relay_Log_File: mysqld-relay-bin.000010
Relay_Log_Pos: 252
Relay_Master_Log_File: mysqld-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Slave Running이 yes가 되어있는지 확인한다.
--------------------- 중략 -------------------------
동기화 확인
마스터서버에서 테스트용 DB를 생성하여 정상적으로 슬레이브서버에 동기화되는지 확인한다.
- REPLICATION 이 지원하지 않는 것 -
Mysql Replication 은 쿼리 단위로의 미러링을 지원한다.
이에 따른 중요 문제가 발생한다.
1. RAND() in updates does not replicate properly. Use RAND
(some_non_rand_expr) if you are replicating updates with RAND(). You
can, for example, use UNIX_TIMESTAMP() for the argument to RAND().
랜덤 함수에 의해 발생되어지는 자료에 대한 업데이트가 이루어지지 않다.
랜덤 함수가 발생한 필드의 자료는 공란(null)로 입력됩니다.
2. LOAD DATA INFILE will be handled properly as long as the file
still resides on the master server at the time of update
propagation. LOAD LOCAL DATA INFILE will be skipped.
load data infile 에 의한 데이터 입력시 마스터 서버에 파일이 남아 있
는 상태에서만 가능하다.
이와는 반대로 load local data infile 은 업데
이트 되지 않는다. Load Local INFILE 문은 Replication이 안된다는 단
점이 있다.
REPLICATION 의 장점
mysql 쿼리의 부하분산을 지원한다.
마스터서버에서 UPDATE, INSERT, DELETE 쿼리를 사용하고 슬레이브서버에서 SELECT문을 사용한다면 부하를 분산시킬 수 있다.
마스터서버에서 장애발생 시 슬레이브서버를 통하여 데이터를 거의 유실없이 복구시킬 수 있다.