[1. 개요]
mysql db 서버 운영 시, master-slave 구성을 통해 아래와 같은 장점 등을 확보
- read / write 분리를 통한 부하 분산
- 데이터 백업 및 복구
- master 장애 시, slave 를 통한 고가용성
master-slave 구성을 위한 작업은 아래와 같은 순서로 진행.
- master 서버에서, replication 권한을 갖는 계정을 생성.
- master 서버에서, replication 을 위한 conf 파일 수정
- master 서버에서, replication 할 database dump 수행
- slave 서버에서, replication 을 위한 conf 파일 수정
- slave 서버에서, master 에서 dump 한 파일을 이용하여 복구 진행
- slave 서버에서, master 서버 접속 정보 설정 및 replication 시작.
여기서는 아래와 같은 환경에서 작업을 진행하였음.
- Ubuntu xx.xx
- MariaDB xx.xx
- master ip:
- slave ip:
[2. master 서버 작업]
첫번째로, replication 권한을 갖는 계정을 생성
- CREATE USER 'slave0'@'%' IDENTIFIED BY 'slave';
- GRANT REPLICATION SLAVE ON *.* TO 'slave0'@'%';
- # 모든 db 및 table 에 대해서 복제할 수 있는 권한을 부여함.
두번째로, DB 서버 설정 파일을 수정해야 하는데,
테스트 한 환경 기준으로는, /etc/mysql/mariadb.conf.d/50-server.cnf 파일을 수정한다.
- [mysqld]
- server-id = 1 # 이 값은, master-slave 설정에 관여하는 모든 DB 서버가 다른 값을 갖도록 해야 한다.
- log-bin = mysql-bin # 절대 경로를 지정하지 않으면, datadir 기준으로 생성 된다.
- binlog_do_db = your_database_name
# 이 값을 지정하지 않은 경우, 모든 database 를 복제하게 됨.
# 보통, 하나의 database 를 명시하는 편이 좋긴 하나...
# 몇가지 주의 사항이 있음.
# master 서버를 대상으로 하는 insert into database.table 의 형태의 쿼리는 binlog 에 반영되지 않음.
# use database; 후 insert table 형태의 쿼리에 대해서만 binlog 에 반영 됨.
# 따라서, 더 나은 설정 방법은
# 이 field 를 비워두고, slave 에서 replicate-do-db 설정을 통해, 복제할 DB 를 선택하는 것...
마지막은, binlog_do_db 에 해당하는 database 를 dump 하는 것으로,
- FLUSH TABLES WITH READ LOCK;
# 먼저 table lock 을 걸고, - mysqldump -u root -p mystorage --master-data > master_dump.sql
# dump 진행 - show master status;
# file 과 position 을 체크한다. - UNLOCK TABLES;
# table lock 해제.
[3. slave 서버 작업]
첫번째로, conf 파일 수정. /etc/mysql/mariadb.conf.d/50-server.cnf
- [mysqld]
- server-id = 2 # master 에 설정한 값과 다르게.
- relay-log = relay-log-bin
# slave 가 master 로 부터 이벤트를 받아, 실행할 쿼리를 저장 할 임시 로그 파일
# 절대 경로를 명시하지 않으면, datadir 을 기준으로 만들어 짐. - replicate_do_db =
# master 에서, binlog_do_db 를 사용하지 않는 경우...
두번째는, master 에서 dump 한 파일을 사용하여 일부 database 복구 진행.
마지막은, master 접속 정보 설정 및 replication 시작으로,
- CHANGE MASTER TO master_host='192.168.0.8', master_user='slave0',
master_password='slave', master_log_file='mylog-bin.000001', master_log_pos=328;
# master_log_file 과 master_log_pos 는 master 서버에서 show master status; 를 통해 확인 한 값을 기입한다.
# - START SLAVE;
- SHOW SLAVE STATUS;
추가로 작성하도록....
'MySQL' 카테고리의 다른 글
insert 방식에 대한 비교 (0) | 2025.04.09 |
---|---|
[mysql] UPDATE vs REPLACE (1) | 2024.04.03 |
[작성해야 됨] mysql. 유용한 함수 (0) | 2024.02.22 |
MySQL. 테이블 용량 관리 (0) | 2023.09.26 |
MySQL. unique key (0) | 2023.06.22 |