MySQL 이중화 - GTID mode in docker

한라산·2024년 7월 13일
0

db

목록 보기
3/3
post-thumbnail

Docker 환경에서 MySQL 이중화 GTID 모드를 구성해보자

이전 기본방식과의 차이는 자동화되어있다는 거다.

  • 귀찮게 컨테이너에 들어갈 필요가 없다.

준비

./docker-compose.yml

services:
  master:
    image: mysql:8.0.35
    environment:
      MYSQL_ROOT_PASSWORD: 1234
      MYSQL_DATABASE: myDb
    volumes:
      - ./master/init-master.sql:/docker-entrypoint-initdb.d/init-master.sql
      - ./master/config:/etc/mysql/conf.d
    networks:
      - mysql_network
    ports:
      - "3306:3306"

  slave:
    image: mysql:8.0.35
    environment:
      MYSQL_ROOT_PASSWORD: 1234
      MYSQL_DATABASE: myDb
    volumes:
      - ./slave/init-slave.sql:/docker-entrypoint-initdb.d/init-slave.sql
      - ./slave/config:/etc/mysql/conf.d
    networks:
      - mysql_network
    ports:
      - "3307:3306"

networks:
  mysql_network:

./master/config/master-config.cnf

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

gtid_mode = on
log_slave_updates = on
enforce-gtid-consistency=ON

./master/init-master.sql

CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

FLUSH PRIVILEGES;

./slave/config/slave-config.cnf

[mysqld]
server-id = 2
read_only = 1
log-bin = mysql-bin

gtid_mode = on
log_slave_updates = on
enforce-gtid-consistency=ON

./slave/init-slave.sql

CHANGE MASTER TO
  MASTER_HOST='master',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl_password',
  MASTER_AUTO_POSITION=1;
START SLAVE;

시작하기

Docker-compose 실행

$ docker compose up -d

정상 실행 확인

slave 컨테이너 접근

$ docker compose exec slave mysql -uroot -p1234

slave 상태 조회

SHOW SLAVE STATUS\G

정상 실행시

Last_IO_Error, Last_SQL_Error가 empty이다.

마치며

완전 간단해져서 만족스럽다.
토폴로지 구성등은 응용해서 해보자~

profile
산입니다.

0개의 댓글