kjh00n의 기록저장소
MariaDB 이중화 (Master - Slave) 본문
[참고]
● 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 |