D드라이브
ㄴ docker
ㄴ database
ㄴ mariadb
ㄴ first
ㄴ data
ㄴ second
ㄴ data
파일위치 : D:\docker\database\docker-compose.yml
version: '3.1'
services:
firstMariadb:
container_name: mariadb-first-container
image: mariadb:latest
restart: always
environment:
MARIADB_ROOT_PASSWORD: root
ports:
- 13306:3306
volumes:
- "/d/docker/database/mariadb/first/data:/var/lib/mysql"
networks:
default_bridge:
ipv4_address: 172.26.0.10
secondMariadb:
container_name: mariadb-second-container
image: mariadb:latest
restart: always
environment:
MARIADB_ROOT_PASSWORD: root
ports:
- 23306:3306
volumes:
- "/d/docker/database/mariadb/second/data:/var/lib/mysql"
networks:
default_bridge:
ipv4_address: 172.26.0.11
depends_on:
- firstMariadb
networks:
default_bridge:
ipam:
driver: default
config:
- subnet: 172.26.0.0/16
volumes는 DB 백업용 기능으로 호스트 서버의 디렉토리(d/docker/database/mariadb/{first or second}/data)와 컨테이너 내부의 /var/lib/mysql 경로의 모든 파일을 연동합니다. 즉 컨테이너 내부에서 만들어진건 호스트 서버의 volumes로 지정된 경로에 생성되거나 삭제되고 마찬가지로 호스트 서버에서 생성되거나 삭제된 부분은 컨테이너 내부에도 영향을 미칩니다. 그래서 컨테이너나 이미지가 모종의 이유로 삭제되더라도 데이터가 초기화 되는 것이 아닌 호스트 서버에 있는 파일들로 이전에 쓰던 db를 그대로 실행 할 수 있습니다.
depends_on으로 지정한 값은 지정한 값이 로드되어 실행단계에 들어가야지 run 하겠다는 의미입니다. 보통 master db가 slave db보다 먼저 실행되어야하기 때문에 지정하였습니다.
networks는 docker 기본 내부망 대역인 172.26.0.0/16를 사용하여 고정 ip를 컨테이너에 부여하기 위함입니다. 내부망이므로 외부에서 해당 ip로 접근은 불가능 합니다.
ports는 포트포워딩 기능입니다. {호스트 포트}:{컨테이너 포트}로 지정함으로써 호스트 서버에 포트가 겹치는 현상을 방지하고 docker의 격리성을 살려 여러 컨테이너를 띄우기 위해서 사용합니다. 컨테이너 외부에서 컨테이너에 접근하려면 {호스트 ip}:{지정한 호스트포트}로 접근하면 자동으로 {컨테이너 ip}:{컨테이너 포트}로 변환되어 접근 할 수 있게 해줍니다.
1. git bash 실행
2. cd /d/docker/database
3. docker-compose up -d
1. git bash 실행
2. winpty docker exec -it mariadb-first-container bash
3. apt-get update
4. apt-get install vim
5. cd /etc/mysql
6. vi my.cnf
7. my.cnf 최하단에 아래 [master my.cnf 예시] 내용 붙여 넣기
8. shift + ; 후 wq! 치고 enter
9. exit 명령어로 컨테이너 벗어나기
10. work bench 실행 또는 dbms 아무거나
11. create database prime; 명령어로 복제대상 DB 생성
log-bin=mysql-bin
server-id=1
1. git bash 실행
2. winpty docker exec -it mariadb-second-container bash
3. apt-get update
4. apt-get install vim
5. cd /etc/mysql
6. vi my.cnf
7. my.cnf 최하단에 아래 [slave my.cnf 예시] 내용 붙여 넣기
8. shift + ; 후 wq! 치고 enter
9. exit 명령어로 컨테이너 벗어나기
10. work bench 실행 또는 dbms 아무거나
11. create database prime; 명령어로 복제대상 DB 생성
server-id=2
replicate-do-db='prime'
1. git bash 실행
2. cd /d/docker/database
3. docker-compose down
3. docker-compose up -d
1. work bench 실행 또는 dbms 아무거나
2. use mysql;
3. create user 'repl_user'@'%' identified by 'test1234';
4. grant all privileges on prime.* to 'repl_user'@'%';
5. flush privileges;
6. show master status; 명령어로 Position 값 확인
1. work bench 실행 또는 dbms 아무거나
2. use mysql;
3. STOP SLAVE;
4. 아래 내용 실행
change master to
master_host='172.26.0.10',
master_user='repl_user',
master_password='test1234',
master_log_file='mysql-bin.000001',
master_log_pos=342;
5. START SLAVE;
6. show slave status; 명령어 쳐서 나온 row에서 모든 ~_Errno 컬럼이 0인지 확인
아래 쿼리 실행
use prime;
CREATE TABLE `TEST2` (
`TEST2_ID` bigint(20) NOT NULL AUTO_INCREMENT,
`TEST2` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`TEST2_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO TEST2(TEST2) VALUES('TEST2 입니다.');
아래 쿼리 실행하여 first db에서 생성하고 삽입한 테이블과 데이터가 조회 되는지 확인
use prime;
SELECT * FROM TEST2;