MySQL 이중화 - Binary in docker

한라산·2024년 7월 11일
0

db

목록 보기
2/3
post-thumbnail

Docker 환경에서 MySQL 이중화를 만들어보자

준비

docker 버전 20.10.0 부터 docker-compose 플러그인이 docker compose 같이 Docker CLI에 통합 되었다.

./docker-compose.yml

Docker Compose v2 부터는 version 필드가 의미가 없어졌다고 한다!

services:
  master:
    image: mysql:8.0.35
    environment:
      MYSQL_ROOT_PASSWORD: 1234
      MYSQL_DATABASE: my_db
      TZ: UTC
    volumes: 
      - ./master/config:/etc/mysql/conf.d
    networks:
      - mysql_network
    ports:
      - "3306:3306"
    command: --default-authentication-plugin=mysql_native_password

  slave:
    image: mysql:8.0.35
    environment:
      MYSQL_ROOT_PASSWORD: 1234
      MYSQL_DATABASE: my_db
      TZ: UTC
    volumes:
      - ./slave/config:/etc/mysql/conf.d
    networks:
      - mysql_network
    ports:
      - "3307:3306"
    command: --default-authentication-plugin=mysql_native_password

networks:
  mysql_network:

./master/config/master-config.cnf

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog_format = ROW

./slave/config/slave-config.cnf

[mysqld]
server-id = 2
read_only = 1

시작하기

Docker-compose 실행

$ docker compose up -d

master 설정

master DataBase의 source를 Replication 할 계정 생성

컨테이너 진입

$ docker compose exec master mysql -uroot -p1234

계정 생성 및 status 확인

master status의 FilePosition 확인
해당 정보를 기반으로 replication이 이뤄짐

CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;

slave 설정

컨테이너 진입

$ docker-compose exec slave mysql -uroot -p1234

Master 정보 및 읽어올 binary log 위치 설정

CHANGE MASTER TO
  MASTER_HOST='master',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl_password',
  MASTER_LOG_FILE='mysql-bin.000003, # master status의 file
  MASTER_LOG_POS=1345; # master status의 position

slave 실행 및 상태 조회

START SLAVE;
SHOW SLAVE STATUS\G; # 대문자로!

정상 실행시

Last_IO_Error, Last_SQL_Error가 empty이다

profile
산입니다.

0개의 댓글