Notice
Recent Posts
Archives
Today
Total
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Recent Comments
관리 메뉴

우당탕탕 개발일지

[MySQL] Master-Slave Replication 본문

Database

[MySQL] Master-Slave Replication

devchop 2023. 7. 13. 19:27

docker 내에 container 를 올려서 사용중.

db001 container 를 master로 놓고 db002, db003 을 slave로 놓아 백업용으로 사용하는 방법을 알아보자.

 

우선 db001 을 만든 것과 동일하게 db002와 db003을 만들어준다. 만드는 방법은 여기에.

https://journal-devchop.tistory.com/5

 

[MySQL] docker 에서 MySQL 사용하기 (생성에서 매핑까지)

개발환경 : macos docker 홈페이지에서 docker desktop download. 다운로드 후 터미널에서 docker --version 명령어를 통해 정상적으로 다운받아졌는지 확인이 가능하다. https://www.docker.com/products/docker-desktop/ Down

journal-devchop.tistory.com

그런데 마스터인 db001과 다른점이 몇 가지 있다. 

1. my.cnf 에 적은 server_id는 세 container가 모두 달라야한다.

2. slave는 my.cnf에 read_olny 옵션을 넣어서 읽기만 가능하게끔 한다.

3. 원격접속하는 포트는 세 개가 모두 다르게 설정한다.  docker run 명령어 시 db001이   -p 옵션에 3306:3306  이었다면 db002 는 3307:3306 으로, db003 은 3308:3306 으로 설정하도록 한다. host에서 들어가는 포트가 다르도록 설정하는것이다.

 

아래는 1과 2가 적용된 db002 의 my.cnf 파일내용이다

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server           = utf8mb4
collation-server               = utf8mb4_unicode_ci

skip-external-locking

skip-name-resolve

##아래 3개가 변경/추가되었다
read_only
server-id = 200
report_host = db002

 

아래는 전체 명령어이다. (저장소 폴더 생성부터 container 실행까지)

#host 저장소에 db002 배칭을 위한 폴더 생성
mkdir /db/db002/data /db/db002/log /db/db002/conf
cat /db/db001/conf/my.cnf > cat/db/db002/conf/my.cnf
chmod 777 --recursive /db/db002 /db/db003

#host-name 과 server-id 변경, readonly 옵션부여, 읽을 수 있도록 권한설정
vi /db/db002/conf/my.cnf 
chmod 644 /db/db002/conf/my.cnf 

#db001 만들때와 거의 동일하지만 포트번호를 변경해야함.
docker run -it --name db002 -h db002 -p 3307:3306 \
-v /db/db002/data:/var/lib/mysql \
-v /db/db002/log:/var/log/mysql \
-v /db/db002/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD="<password기입>" \
-d mysql:latest

#정상적으로 실행되었는지 확인한다.
docker ps

 

이렇게하면 총 3개의 container가 생성되어야한다. (db001 : Master / db002&db003 : Slave)

 

문제발생)

db002 를 포트번호 3307:3306 으로 실행하는데 둘중 하나가 shutdown 되는 현상이 발생했다.