



mysqlbinlog와 같은 도구를 통해 관리된다.
docker container run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=6548 --name dockerMariadb1 mariadb
docker container run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=6548 --name dockerMariadb2 mariadb
docker container run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=6548 --name dockerMariadb3 mariadbdocker exec -it dockerMariadb1 /bin/bash
apt update;
apt install vim;
vi /etc/mysql/my.cnf // 밑에서 추가될 부분 설명
docker restart dockerMariadb1
docker exec -it dockerMariadb1 /bin/bash
mariadb -u root -p
grant replication slave on *.* to 'repl_user'@'%' identified by 'p@ssw0rd';
show master status;vi /etc/mysql/my.cnf → 제일 밑에 추가하기[mysqld]
log-bin = mysql-bin
server-id = 1
binlog_format = row
expire_logs_days = 2grant replication slave on *.* to 'repl_user'@'%' identified by 'p@ssw0rd';grant replication slave: REPLICATION SLAVE 권한을 부여한다. 이 권한은 레플리카(슬레이브) 서버가 마스터 서버로부터 데이터를 복제하는 데 필요하다.on *.*: 모든 데이터베이스의 모든 테이블에 대해 권한을 부여한다.to 'repl_user'@'%': repl_user라는 사용자 이름으로 어떤 호스트(%)에서든지 연결을 허용한다. %는 모든 호스트를 의미하는 와일드카드이다.identified by 'p@ssw0rd': repl_user의 비밀번호를 p@ssw0rd로 설정한다.show master status; → MariaDB에서 현재 마스터 서버의 복제 상태를 보여주는 명령이다.
docker exec -it dockerMariadb2 /bin/bash
apt update;
apt install vim;
vi /etc/mysql/my.cnf // 밑에서 추가될 부분 설명
docker restart dockerMariadb2
docker exec -it dockerMariadb2 /bin/bash
mariadb -u root -p
CHANGE MASTER TO MASTER_HOST = '123.45.6.7'
, MASTER_PORT=3306
, MASTER_USER='repl_user'
, MASTER_PASSWORD='p@ssw0rd'
, MASTER_LOG_FILE='mysql-bin.000001'
, MASTER_LOG_POS=523
, MASTER_CONNECT_RETRY=10;
start slave;
SHOW SLAVE STATUS\G;vi /etc/mysql/my.cnf → 제일 밑에 추가하기[mysqld]
log-bin = mysql-bin
server-id = 2 // Slave2는 3으로 두면 된다.
binlog_format = row
expire_logs_days = 2
read_only = 1 // Slave DB는 읽기만 처리하므로 Read_Only로 둔다.CHANGE MASTER ~~~MASTER_PORT = 3306 → 마스터 서버가 리스닝하고 있는 포트 번호이다.MASTER_USER = 'repl_user' → 복제를 위해 사용될 마스터 서버의 사용자 계정 이름이다.MASTER_PASSWORD = 'p@ssw0rd' → 위 사용자 계정의 비밀번호이다.MASTER_LOG_FILE = 'mysql-bin.000001' → 복제를 시작할 마스터 서버의 바이너리 로그 파일 이름이다. show master status;로 확인한 값이다.MASTER_LOG_POS = 523 → 바이너리 로그 파일 내에서 복제를 시작할 위치(오프셋)이다. show master status;로 확인한 값이다.MASTER_CONNECT_RETRY = 10 → 연결 실패 시 재시도할 시간 간격(초)이다. 이 경우, 레플리카는 연결 실패 후 10초마다 마스터 서버에 재연결을 시도한다.SHOW SLAVE STATUS\G; → 명령은 레플리카 서버의 복제 상태에 대한 정보를 보여준다.





Real MySQL 8.0 책에 나온 구문입니다.| GTID | 바이너리 로그 파일명 | 바이너리 로그 오프셋 |
|---|---|---|
| 0-0-1 | binart-log.000001 | 232 |
| 0-0-2 | binart-log.000001 | 444 |
| 0-0-3 | binart-log.000001 | 1023 |
| GTID | 바이너리 로그 파일명 | 바이너리 로그 오프셋 |
|---|---|---|
| 0-0-1 | binart-log.000002 | 40230 |
| 0-0-2 | binart-log.000002 | 41232 |
| 0-0-3 | binart-log.000002 | 49801 |
| GTID | 바이너리 로그 파일명 | 바이너리 로그 오프셋 |
|---|---|---|
| 0-0-1 | binart-log.000003 | 123456 |
| 0-0-2 | binart-log.000003 | 162331 |
| 0-0-3 | binart-log.000003 | 190021 |
read_only = 1를 삭제한다.Stop Slave; 를 입력한다.read_only = 1를 삭제한다.[mysqld]
log-bin = mysql-bin
server-id = 2 // Slave2는 3으로 두면 된다.
binlog_format = row
expire_logs_days = 2
read_only = 1 // Slave DB는 읽기만 처리하므로 Read_Only로 둔다.Docker Restart “도커 컨테이너 이름”으로 재시작해준다.grant replication slave on *.* to 'repl_user'@'%' identified by 'p@ssw0rd'; → 기존 사용했던 Master DB와 동일한 권한으로 진행하였다. 이건 사용하기 나름이다.FLUSH PRIVILEGES; 를 입력해준다.select @@GLOBAL.gtid_current_pos; GTID를 찾아준다.
CHANGE MASTER TO MASTER_HOST = '172.17.0.3'
, MASTER_PORT=3306
, MASTER_USER='repl_user'
, MASTER_PASSWORD='p@ssw0rd'
, MASTER_USE_GTID = slave_pos;MASTER_USE_GTID = slave_pos; 이다.MASTER_USE_GTID 옵션은 두가지가 존재하는데 slave_pos, current_pos이 있다.start slave;로 시작하고 SHOW SLAVE STATUS\G; 로 확인해보았다.