kjh00n의 기록저장소

MariaDB 이중화 (Master - Slave) 본문

세미프로젝트

MariaDB 이중화 (Master - Slave)

kjh00n 2024. 11. 28. 11:35

Data가 연동되는 과정

[참고]

● SlaveDB는 오로지 SELECT를 하기 위해 존재하는데 MasterDB에서 데이터를 수정 및 삭제하기 위해 계정에 권한을 주는데 이러면 SlaveDB에서도 이 계정을 사용해 들어가서 데이터를 수정 및 삭제가 가능하게 된다.

● SlaveDB에서 수정 및 삭제가 되는 것을 방지하기 위해서는 SELECT 권한만을 가진 계정을 따로 생성해야 되는데 이렇게 계정을 2개씩 만드는 방법도 있지만 SlaveDB의 세팅을 read-only=1이라는 세팅을 사용하여 계정하나로도 SlaveDB에서는 수정 및 삭제가 안되게 방지할 수 있다.

[Master DB]

[DB 생성, 계정 생성, 권한 부여]

CREATE DATABASE repl_db DEFAULT CHARACTER SET utf8;

CREATE USER user1@'%' IDENTIFIED BY 'test1234';

GRANT ALL PRIVILEGES ON repl_db.* TO user1@'%' IDENTIFIED BY 'test1234';

 

[리플리케이션 계정 생성]

CREATE USER repl_user@’%’ IDENTIFIED BY ‘test456’;

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

 

[mycnf 설정]

[mysqld]

log-bin=mysql-bin

server-id=1

log-bin옵션은 로그 파일을 사용하겠다는 의미와 로그파일의 이름을 설정하는 옵션이다.

이 옵션 사용안하면 이중화 불가능하다.

mysqld에 적힌 socket은 socket파일이 설치될 경로를 지정해주는 것이다.client에 적힌 socket은 client가 접속할 때 socket파일을 사용해서 접속하는데 경로를 알려줘서 경로에 있는 socket파일을 사용하라고 알려주는거다.

 

하고나서 설정해놓은 경로의 mysqldata의 사용자와 그룹을 mysql로 변경해줘야 된다.

chown -R mysql:mysql /raid5/mysqldata

[Master DB 서버 정보 확인]

SHOW MASTER STATUS;

[Slave DB]

[mycnf 설정]

[mysqld]
server-id=2

mysqld에 적힌 socket은 socket파일이 설치될 경로를 지정해주는 것이다.

client에 적힌 socket은 client가 접속할 때 socket파일을 사용해서 접속하는데 경로를 알려줘서 경로에 있는 socket파일을 사용하라고 알려주는거다.

 

하고나서 설정해놓은 경로의 mysqldata의 사용자와 그룹을 mysql로 변경해줘야 된다.

chown -R mysql:mysql /raid5/mysqldata

replicate-do-db는 1개만 사용해야된다.

※그 이상으로 사용하면 마지막으로 설정된 DB만 동기화되게 된다.

replicate-do-db를 사용하지 않으면 MasteDB에서 만든 모든 DB,Table들이 SlaveDB에 저장된다.

[Master 서버로 연결하기 위한 설정]

CHANGE MASTER TO

MASTER_HOST='30.30.30.1',

MASTER_USER='repl_user',

MASTER_PASSWORD='test456',

MASTER_LOG_FILE='mysql-bin.000001',

MASTER_LOG_POS=328;

systemctl restart mariadb;

 

[Master DB 확인]

show processlist\G

[Slave DB 확인]

show processlist\G

show slave status\G


[구현]

[Master DB]

CREATE TABLE information (NO int unsigned auto_increment not null primary key, Name varchar(20) not null);

SHOW TABLES;

INSERT INTO information VALUES (0,'kjh');

SELECT * FROM information;

 

[Slave DB]

SHOW TABLES;

SELECT * FROM information;


[주의사항]

● root계정에서 DB,table,data다 만들어주고 계정 만들고 계정별로 권한 설정해주면 다 보인다~

● 동기화 하기 전에 MasterDB에 DB를 만들고 Table을 만들어놓은 상태로 동기화를 하면 SlaveDB에서는 동기화하기 이전의 DB와 Table은 동기화되지 않는다. 다른 설정들도 마찬가지

● 꼭 동기화하고 나서 MasterDB에서 설정을 해놔야 SlaveDB에서도 동기화된 데이터들이 저장된다.

[특정 IP로 설정된 계정으로 접속]

mariadb -h [접속하려는 DB 주소] -u [계정명] -p

→ 위 방법으로 접속을 해야 접속이 가능해진다.

 

'세미프로젝트' 카테고리의 다른 글

DB EVENT  (0) 2024.12.03
방화벽 구성  (0) 2024.12.03
DB 구성  (0) 2024.12.03
DB 이중화 옵션 (SLAVE에서 설정)  (0) 2024.11.28
RAID에 DB구성하기  (0) 2024.11.28