반응형

MySQL/MariaDB 복제구축

 

  • Version : Mariadb 5.5.4.2-WinX64

 

MySQL/MariaDB 복제구축 방법에 대해서 알아본다. 복제를 구축하기 위해서는 최소 2대의 서버가 준비되어 있어야 한다.

 

[복제 구축 전 준비 사항]

  • MySQL/MariaDB는 설치되어 있는가?
  • 복제에 사용할 포트는 열려 있는가? (기본 포트 3306)
  • Slave에서 사용할 계정은 생성되어 있는가?
  • 바이너리 로그는 활성화 되어 있는가?
  • Master, Slave의 Server-id는 고유한가?

 

이번 실습에서는 Master 서버의 호스트명이 'KSW_2012_2' 이며 포트는 Master, Slave 모두 기본 포트 3306을 사용하였다.

 

[복제 설정 준비]

복제를 구축하기 전에 복제에 사용할 수 있도록 바이너리로그 및 Server-id, 로그캐시 등을 설정한다. 설정은 my.ini (my.cnf)에서 한다.

Master (my.ini)

slave (my.ini)

Server-id = 101

log-bin = 1

sync_binlog = 5M

max_binlog_size = 512M

log-bin-trust-function-creators = 1

server-id = 102

relay-log = relay_log

relay_log_purge = TRUE

read_only

 

Master의 log-bin-trust-function-creators 설정값은 마스터 MariaDB에서 스토어드 함수나 트리거를 생성할 때 발생하는 경고 메시지를 제거하기 위해 적용 하였다.

 

Slave 서버에서는 릴레이 로그가 생성되는데 릴레이 로그를 저장할 디렉터리나 필요하지 않는 릴레이 로그를 자동으로 삭제하려면 relay-log와 relay_log_purge로그 옵션을 추가로 설정해야 한다. Slave 서버는 일반적으로 읽기 전용으로 사용되므로 read_only 설정도 함께 사용하는 편이 좋다.

 

 

설정이 완료 되었으면 Master, Slave 서버의 MariaDB 서비스를 재시작 한다. Master 서버에서 바이너리 로그가 정상적으로 기록되고 있는지는 Master 서버에서 SHOW MASTER STATUS라는 명령을 실행 한다.

 

show master status;

 

 

현재 사용되고 있는 바이너리 로그파일의 이름은 1.000001 이며 해당 파일에 기록된 바이너리 로그의 위치는 5765번이다. 서버가 트랜잭션을 계속해서 처리하는 중이라면 이 값은 계속 증가한다.

 

[복제 계정 준비]

Slave 서버가 Master 서버의 바이너리 로그를 가져오려면 Master 서버의 계정이 필요하다. 이때 Slave가 사용할 계정을 복제용 계정이라고 하는데 REPLICATION SLAVE 권한을 갖고 있어야 한다. 아래 스크립트는 Master 서버에서 실행하며 repl_user 라는 계정을 생성한다.

create user 'repl_user'@'%' IDENTIFIED BY 'slavepass';

GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';

 

 

[데이터 복사]

Master 데이터를 Slave로 복사하여야 하는데 Enterprise backup이나 mysqldump등을 이용해 데이터를 Slave로 복사하면 된다. 아래 스크립트는 데이터를 master_data.sql로 저장하는 명령이다.

Mysqldump –uroot –p 00opt –single-transaction –hex-blob –master-data=2 –routiness –triggers –all-databases > master_data.sql

 

 

생성된 SQL에는 Master 로그파일, 로그 위치 등을 포함하여 데이터베이스 생성 스크립트가 포함되어 있다.

 

생성된 master_data.sql을 Slave 서버에서 실행한다.

 

[복제시작]

Master와 Slave 복제를 시작하는 명령은 CHAGE MASTER 명령을 사용하며 Master 로그 파일 및 로그 위치는 백업 받은 파일의 헤더에서 확인 할 수 있다.

 

아래 명령어는 slave에서 실행하며 복제를 시작 한다.

CHANGE MASTER TO MASTER_LOG_FILE='1.000001', MASTER_LOG_POS=495, master_host='KSW_2012_2', master_port=3306, master_user='repl_user', master_password='slavepass';

 

Slave에서 SHOW SLAVE STATUS 명령을 실행해보면 복제 관련 정보가 등록되어 있는 것을 확인할 수 있다.

show slave status;

 

 

Slave_Running와 Slave_SQL_Running가 'NO'로 되어 있는 것을 복제 관련 정보만 등록된 것으로 동기화가 시작되지는 않은것이다. START SLAVE 명령을 실행하면 위의 두 값이 YES로 바뀌면서 동기화를 시작하게 된다.

start slave;

 

 

 

SHOW SLAVE STATUS정보에서 Seconds_Behind_Master의 상태값이 0이 되면 Master와 Slave의 데이터가 완전히 동기화 되었음을 표시한다. 만약 START SLAVE 명령을 실행 하였는데에도 Slave_Running와 Slave_SQL_Running가 'NO'로 표시되어 있다면 호스트명이나 포트 등 Slave의 접속 정보 및 네트워크가 정상적인지 확인한다.

 

 

 

[참고자료]

Real MySQL – 위키북스

 

2015-06-08 / 강성욱 / http://sqlmvp.kr

 

 

MariaDB, MySQL, MySQL 복제, MariaDB 복제, MySQL Replication, MariaDB Replication, 복제설정, 바이너리로그, 복제로그

반응형

+ Recent posts