ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Docker - MySQL] Master-Slave 동기화
    Data Base/Master-Slave 2024. 4. 21. 22:10
    728x90
    반응형

    DB(데이터베이스)를 Master와 Slave로 나누는 것은 주로 데이터베이스의 성능, 확장성, 가용성, 및 안정성을 향상시키기 위해 사용되는 아키텍처 설계 패턴입니다. Master는 데이터에 대한 쓰기 작업을 담당하고, Slave는 주로 읽기 작업을 처리합니다. 이렇게 부하를 분리함으로써 읽기 요청이 많은 환경에서 성능을 향상시킬 수 있습니다.


    NETWORK

    docker network master-slave
    
    docker network connect master-slave [master container_name_or_id]
    docker network connect master-slave [slave container_name_or_id]
    
    docker network inspect master-slave

    Master

    CREATE DATABASE MASTER_DB; -- MASTER용 DB를 생성한다.
    
    CREATE USER 'MASTER_ID'@'%' IDENTIFIED WITH mysql_native_password BY 'MASTER_PWD'; -- MASTER용 계정 생성
    
    -- 권한을 설정한다.
    GRANT REPLICATION SLAVE ON *.* TO 'MASTER_ID'@'%';
    GRANT ALL PRIVILEGES ON MASTER_DB.* TO 'MASTER_ID'@'%';
    
    SET GLOBAL server_id=1; -- MASTER-SLAVE 전략시 server_id가 달라야 하기 때문에 설정해준다.
    -- 또는 my.cnf에서 server_id=1 이렇게 설정할 수 있다.
    -- my.cnf로 설정시 다시 시작 해도 설정되지만 SET GLOBAL은 재시작시 사라진다.
    
    FLUSH PRIVILEGES;
    
    SHOW MASTER STATUS;
    
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000002 |     2554 |              |                  |                   |
    +---------------+----------+--------------+------------------+-------------------+

    Slave

    CREATE USER 'SLAVE_ID'@'%' IDENTIFIED BY 'SLAVE_PWD'; -- SLAVE용 계정 생성
    
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'SLAVE_ID'@'%'; -- 권한을 설정한다.
    
    SET GLOBAL server_id=2; -- MASTER-SLAVE 전략시 server_id가 달라야 하기 때문에 설정해준다.
    
    FLUSH PRIVILEGES;
    
    CHANGE MASTER TO
        MASTER_HOST = 'MASTER IP',
        MASTER_PORT = 'MASTER PORT',
        MASTER_USER = 'MASTER ID',
        MASTER_PASSWORD = 'MASTER_PASSWORD',
        MASTER_LOG_FILE = 'SHOW MASTER STATUS > FILE'
        
    START SLAVE;
    
    SHOW SLAVE STATUS\G;

    SLAVE STATUS

    • Slave_IO_Running과 Slave_SQL_Running : 모두 Yes
    • Exec_Master_Log_Pos : 마스터의 바이너리 로그를 어디까지 실행했는지 나타내는 위치 포인터
    728x90
    반응형
Designed by Tistory.