본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


기타

Mysql 이중화, Maria 이중화 (Mysql동기화, Maria동기화)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2020. 6. 9.

 

Mysql(Maria)서버간 서로 이중화를 하는 방법입니다.

여기서는 2개의 데이터 베이스를 사용하였습니다.

테스트 환경으로는 운영체제는 우분투를 사용하였습니다.

 * OS 버전 : Ubuntu 18.04.3 LTS

 * 마리아 버전 : 10.1.44-MariaDB-0ubuntu0.18.04.1

 

1개의 서버를 마스터서버, 1개의 서버를 슬레이브 서버라고 하겠습니다.

마스터 역할을 하는 서버는 원본 서버라고 생각하시면 됩니다.

마스터 서버를 바라보고 있다가(슬레이브 or 백업의 개념) 마스터 서버의 데이터가 변하면 변동된 데이터를 적용하는 서버를 슬레이브 서버라고 합니다.

먼저 마스터 역할을 할 서버에 작업을 하겠습니다.

 

* 마스터 서버 세팅

 

1. 상대방이 접속할 계정을 생성합니다.

mysql 콘솔에 접속하여 아래 명령어를 입력합니다.

아이디와 비밀번호는 상대방 서버가 사용할 사용자 정보입니다.

grant replication slave on *.* to '아이디'@'%' identified by '비밀번호';

slave on *.*은 모든 데이터베이스의 모든 테이블을 의미합니다.

만약 특정 데이터베이스, 테이블을 설정하려면 "slave on *.*"의 내용을 "slave on 데이터베이스명.테이블명" 을 입력하도록 합니다.

 

2. Mysql설정 파일인 my.cnf 파일의 내용을 수정합니다.

패키지 인스톨러(yum, apt-get)를 활용해서 설치 했으면 /etc 디렉토리 및에 해당 파일이 있습니다.

 * 일반적으로 /etc/mysql/my.cnf 또는 /etc/my.cnf 에 존재합니다.

 * 수동으로 설치한 경우 my.cnf을 찾아서 수정 해 주어야 합니다.

해당 파일을 찾은 뒤에 아래 내용을 복사하여 붙여줍니다.

[mysqld]
log-bin=mysql-bin
server-id=1

server-id는 서버의 고유 아이디 값 입니다. 해당 아이디 값이 겹치지 않아야 합니다!

 

3.  서버를 재시작 하여 줍니다.

만약 서비스에 등록이 되어있다면 service mysqld restart 명령어를 통해 재시작 하여 줍니다.

 

4. mysql 콘솔에 접속하여 아래 명령어를 입력합니다.

show master status;

File과 Position이라는 값이 보입니다.

 

File, Position이라는 값을 볼 수 있습니다.

해당내용을 복사하여 메모장이나 다른 파일에 잠시 기록하여 둡니다.

 

1번부터 4번까지가 마스터서버의 세팅 방법 입니다.

 

 

* 슬레이브 서버 세팅

 

가) 마스터서버에서 바라볼 데이터베이스명과 동일하게 데이터베이스를 생성하여줍니다.

 

나) Mysql설정 파일인 my.cnf 파일의 내용을 수정합니다. 

 * 일반적으로 /etc/mysql/my.cnf 또는 /etc/my.cnf 에 존재합니다.

 * 수동으로 설치한 경우 my.cnf을 찾아서 수정 해 주어야 합니다.

[mysqld]
server-id=2
replicate-do-db='바라볼db명칭'

server-id는 서버의 고유 아이디 값 입니다. 해당 아이디 값이 겹치지 않아야 합니다!

 

다) mysql 콘솔에 접속한 뒤에 아래 명령어를 입력합니다.

change master to master_host='마스터서버주소', 
  master_user='아이디', 
  master_password='비밀번호', 
  master_log_file='적어둔내용1', 
  master_log_pos=적어둔내용2;

여기서 "아이디" 와 "비밀번호" 는 "마스터서버세팅"에서 가장 첫번째 부분에서 만들어준 아이디와 비밀번호입니다.

당연히 아이디와 비밀번호가 틀리다면 오류가 발생 합니다.

master_log_file에 넣어야할 내용은 "마스터서버세팅"에서 4번째 부분으로 해당 명령어를 실행한 뒤에 나온 File에 해당하는 값 입니다. 양 끝에 홑따옴표를 붙인뒤에 내용을 입력 하도록 합니다.

master_log_pos부분도 "마스터서버세팅"에서 4번째에서 나온 Position이라는 값 입니다.

위 명령어를 1줄로 만든 뒤에 엔터키를 누릅니다.

* 만약!!! 포트가 기본포트인 3306을 사용하지 않는다면 "master_port=포트번호"를 추가하여 줍니다!

 

라) 서버를 재시작 합니다.

service mysqld restart

 

"가)"번부터 "라)"번 단계까지가 슬레이브 서버의 세팅방법 입니다.

 

 

 

여기까지 아무런 오류메시지 없이 동작을 완료하였다면 마스터 서버Mysql콘솔로 접속하여 아래 명령어를 입력합니다.

마스터 서버의 Mysql콘솔입니다! 슬레이브 아닙니다!

show processlist\G

아이디 only2라는 계정으로 슬레이브가 붙어있습니다!

 

해당 사진과 같이 User에 마스터 서버가 부여한 아이디 값을 가지고 슬레이브 서버의 IP주소가 Host에 나타나게 된 다면 서로의 이중화 작업은 끝난 것이라 할 수 있습니다.

 

이상없이 마스터서버가 슬레이브 서버에게 데이터의 변화에 따라 바뀌는 것을 볼 수 있습니다.

 

만약 오류가 발생한다면 아래의 경우를 살펴보아야 합니다.

1. 마스터 -> 슬레이브 서버와 방화벽 문제

2. master_log_file과 master_log_pos에서의 공백 문자 입력, 다른번호 입력에 따른 오류

 - mysql 콘솔에 접속한 뒤 아래 명령어를 통해 내용을 바꾸도록 합니다.

 - slave stop
 - change master to master_log_file='바꿀내용1', master_log_pos=바꿀내용2;
 - slate start

3. 허락하지 않는 테이블로의 이중화

 - grant replication slave.. 명령어를 입력 할 때의 허용하지 않는 데이터베이스에 접속하는 문제입니다.

 - 데이터베이스의 허용부분을 바꾸어 주도록 합니다.

 

이상으로 Mysql에서의 이중화 방법에 대해 알아보았습니다.

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글