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;
|