통합검색

Linux

[centOS] 두대의 MariaDB 서버간 데이터베이스 동기화 (replication) 처리

  • 2022.12.13 09:45:33
 


두대의 MariaDB 서버간 데이터베이스를 동기화(replacation) 방법을 안내한다.
(replication은 DBMS의 부하분산 환경을 구축할 때 유용하다.)

두대의 서버 중 데이터베이스의 데이터를 보내줄 서버를 'master', 데이터를 받을 서버를 'slave'라 칭한다.
두 서버간 replicatin 원리는 master 서버에서 수시로 mariadb 로그 내용을 binary로 slave에 전달하고,
slave는 이 로그 내용을 토대로 변경된 작업 내역이 있다면 동일하게 slave에서도 처리하게 되는 원리다.


[!]master - 동기화할 DB 및 계정 생성[/!] 
가장 먼저 replication 시킬 DB를 생성한다.
 
#mysql -u root -p

로 mysql에 접속한다. 
 
MariaDB [(none)] > use mysql;

Mysql에 접속 되면 위와 같이 mysql DB를 선택한다.
 
MariaDB [(mysql)] > create database testdb default character set utf8;

testdb 데이터베이스를 생성한다.
 
MariaDB [(mysql)] > create user testuser@'%' identified by 'password';

testdb 데이터베이스에 접속할 새로운 아이디를 생성한다.
이 때 slave(외부 서버)에서 접속 가능해야 하기 때문에 '%'로 외부 접속을 허용해야 한다.
 
MariaDB [(mysql)] > grant replication slave on *.* to 'testuser'@'%' identified by 'password';

방금 생성한 testuser에게 replacation 권한을 부여한다.



[!]master - replication 활성화를 위한 my.cnf 설정[/!] 
replication 활성화를 위해 master 서버의 mariadb 설정을 수행한다.
 
#vi /etc/my.cnf

mariaDB 설정 파일인 my.cnf를 vi 로 연다.
 
[mysqld]
log-bin=mysql-bin
server-id=1

[mysqld] 부분을 찾거나, 없다면 추가하여 위와 같은 구문을 추가한다.
위 구문은 binary로 slave로 보내기 위한 로그 설정이다.
 
#systemctl restart mariadb

my.cnf 설정 변경을 반영하기 위해 mariaDB를 재구동한다.
 
MariaDB [(mysql)] > show master status;

재구동 후 mysql 로 다시 접속하여 master 서버 상태를 확인한다.
아래와 같은 내용이 노출된다면 성공적으로 master가 셋팅된 것이다.





[!]slave - 동기화할 DB 및 계정 생성[/!] 
master 에서 받아온 정보를 동기화 해야 하기 때문에 master에서 생성한 동일한 db와 계정을
slave에도 생성해야 한다. 계정 정보도 master와 동일하게 설정한다.
 
#mysql -u root -p

로 mysql에 접속한다. 
 
MariaDB [(none)] > use mysql;

Mysql에 접속 되면 위와 같이 mysql DB를 선택한다.
 
MariaDB [(mysql)] > create database testdb default character set utf8;

testdb 데이터베이스를 생성한다.
 
MariaDB [(mysql)] > create user testuser@'%' identified by 'password';

testdb 데이터베이스에 접속할 새로운 아이디를 생성한다.



[!]slave - slave 설정을 위한 my.cnf 설정[/!] 
slave 서버 설정을 위해 my.cnf 로 mariaDB 셋팅을 수행한다.
 
#vi /etc/my.cnf

vi 로 my.cnf 를 연다.
 
[mysqld]
server-id=2
replicate-do-db='testdb'

위와 같이 구문을 추가한다.



[!]slave - master 와 replication 연결[/!] 
master와 replication 연결을 위해 mysql 연결 상태에서 아래와 같이 연동 작업을 한다.
아래 작업은 mysql 접속 상태에서 수행한다.
 
MariaDB [(mysql)] > STOP SLAVE;
MariaDB [(mysql)] > RESET SLAVE;

기존 slave 설정이 되어 있었따면 slave 설정을 초기화.
  
MariaDB [(mysql)] > change master to
master_host='master 서버 ip',
master_user='testuser',
master_password='testuser password',
master_log_file='mysql-bin.000022',
master_log_pos=3858;

mysql 명령줄에서 위와 같이 적용한다.
아래 두 줄은 master의 로그파일 참조를 위한 설정이므로 앞서 master 에서 status로 조회한 정보와 동일한 정보를 입력해야 한다.
만약, master에서 db 쿼리 작업이 진행되었다면 log 파일명과 위치가 달려졌을 수 있으므로
위 구문 입력 전 한번 더 master의 갱신된 상태를 조회후 진행하는 것이 좋다.

<master 에서 조회한 status>


 
MariaDB [(mysql)] > START SLAVE;

slave를 활성화 한다.
 
#systemctl restart mariadb

모든 설정이 완료 되었으므로 mariadb를 재구동하여 설정 내용을 반영한다.



[!]master & slave - replication 상태 확인[/!] 
모든 셋팅이 마무리 되었으므로 replication이 잘 작동중인지 각각의 서버에서 mariaDB 프로세스 상태를 확인해 본다.
아래와 같이 master, slave 모두 replication 상태인 것을 확인할 수 있다.

<master>
MariaDB [(mysql)] > show processlist\G;


(예시이므로 User 명이 다르므로 감안하여 봐야 한다.)

<slave>
MariaDB [(mysql)] > show processlist\G;