아주 단순한 Database를 구성할때에는 아래의 그림처럼 하나의 서버와 하나의 Database를 구성하게 된다.

하지만 사용자는 점점 많아지고, Database가 여러 요청을 처리하기 어려울때 Database를 여러개 만들어 요청을 처리하기 위해 만들어졌다.
두개 이상의 Database를 만들어서 Master/Slave를 구축하여 동일한 데이터를 보관하는 방식이다.

준비물
CentOS Linux release 7.6.1810 (Core)
MySQL 5.7
Master Server IP - 172.27.0.197
Slave Server IP - 172.27.0.159
기본적으로 Master DB server에 담겨져 있는 DB입니다.

vi /etc/my.cnf
[mysqld] 하단에 추가하기
server-id = 1
log-bin = mysql-bin

:wq를 이용하여 저장한 후
systemctl restart mysqld (MySQL을 재시작합니다.)
mysql -u root -p (MySQL을 접속합니다.)
Master 서버와 Slave 서버를 연결해줄 계정을 생성합니다.
create user '계정명'@'%' identified by '페스워드';
grant replication slave on *.* to '계정명'@'슬레이브서버주소' identified by '패스워드';
flush privilages;(변경사항을 저장합니다.)
flush tables with read lock;
reset master;
show Master status;(flie과 Position의 내용을 기억합니다.)


다시 콘솔창으로 돌아옵니다.
Database를 백업합니다.
mysqldump -u root -p 데이터베이스명 > 저장할 파일이름

scp를 이용하여 dump_file.sql파일을 Slave Server로 옮기기
scp dump_file.sql '계정명'@SlaveIP:'원하는 디렉토리'
vi /etc/my.cnf
[mysqld] 하단에 추가하기
server-id = 2
log-bin = mysql-bin

:wq를 이용하여 저장한 후
Database 백업파일 붙여넣습니다.
systemctl restart mysqld (MySQL을 재시작합니다.)
mysql -u root -p < 백업파일위치
mysql u -root -p (MySQL을 접속합니다.)

접속한 후 db를 확인합니다.
stop slave;
reset slave;
use 데이터베이스명 (Master Server에서 사용한 Db명을 입력하여 접속합니다.
select * from testdb;(Master Server와 같이 세팅했습니다.)

Master Server와 Slave Server를 연결해줍니다.
mysql> CHANGE MASTER TO
MASTER_HOST='마스터서버주소',
MASTER_USER='생성한유저',
MASTER_PASSWORD='생성한암호';
MASTER_LOG_FILE='기억해둔 File',
MASTER_LOG_POS='기억해둔 Position'; (입력하여 Master 서버와 연결해줍니다.)
start slave; (Slave를 시작합니다.)

Master Server로 돌아가서
UNLOCK TABLES;(백업을 위하여 Lock걸었던 DB를 UNLOCK해줍니다.)
설정이 모두 끝난뒤 Master Server에 값을 넣어주면 Slave Server에서 확인이 됩니다.
