Docker 환경에서 MySQL 이중화 GTID 모드를 구성해보자
이전 기본방식과의 차이는 자동화되어있다는 거다.
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:
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog_format = ROW
gtid_mode = on
log_slave_updates = on
enforce-gtid-consistency=ON
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
[mysqld]
server-id = 2
read_only = 1
log-bin = mysql-bin
gtid_mode = on
log_slave_updates = on
enforce-gtid-consistency=ON
CHANGE MASTER TO
MASTER_HOST='master',
MASTER_USER='repl',
MASTER_PASSWORD='repl_password',
MASTER_AUTO_POSITION=1;
START SLAVE;
$ docker compose up -d
$ docker compose exec slave mysql -uroot -p1234
SHOW SLAVE STATUS\G
Last_IO_Error, Last_SQL_Error가 empty이다.

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