본문 바로가기

MySQL

mysql. master-slave 구성

[1. 개요]

mysql db 서버 운영 시, master-slave 구성을 통해 아래와 같은 장점 등을 확보

  1. read / write 분리를 통한 부하 분산
  2. 데이터 백업 및 복구
  3. master 장애 시, slave 를 통한 고가용성

master-slave 구성을 위한 작업은 아래와 같은 순서로 진행.

  1. master 서버에서, replication 권한을 갖는 계정을 생성.
  2. master 서버에서, replication 을 위한 conf 파일 수정 
  3. master 서버에서, replication 할 database dump 수행

  4. slave 서버에서, replication 을 위한 conf 파일 수정
  5. slave 서버에서, master 에서 dump 한 파일을 이용하여 복구 진행
  6. 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