Docker로 Mysql DB 이중화(Replication) 방법
DB를 이중화해야 하지만 개발형편상 서버 추가는 어려운 상황이였다.
그래서 기존 서버는 그대로 두고 docker로 Mysql을 추가 설치해서 이중화 하기로 결정했다.
- Master DB는 설치된 그대로 유지
- Docker로 Slave DB를 설치하여 이중화
우선 Docker부터 설치하고 mysql을 검색한다.
$ yum install -y docker
$ docker search mysql
수 많은 mysql 이미지 중 docker.io/mysql을 받는다.
$ docker pull docker.io/mysql
도커 이미지를 확인하고 run을 해준다.
$ docker images
$ docker run -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=패스워드 --name mysql-slave mysql
# 외부에서 접속은 13306포트 // 내부는 3306으로 연결
#slave 도커 접속
$ docker exec -it mysql-slave bash
#위에서 설정한 비빌번호 입력해서 mysql 접속
$ mysql -u root -p
#디비생성
$ create database TSCPDB4;
$ exit #빠져나옴
Master가 되는 기존 디비를 덤프 뜬다
$ mysqldump -u neighbor -p TSCPDB4 > TSCPDB4_dump.sql
#slave 도커에 Copy
$ docker cp /DATA/TSCPDB4_dump.sql mysql-slave:.
#slave 도커 접속
$ docker exec -it mysql-slave bash 접속
#덤프 뜬 디비 옮기기
$ mysql -u root -p TSCPDB4 < TSCPDB4_dump.sql
#slave에 계정 생성
$ create user '아이디'@'%' identified with mysql_native_password by '비밀번호';
#권한설정
$ grant all privileges on TSCPDB4.* to '아이디'@'%';
Master mysql에 접속해서 Replication slave 권한 설정
$ grant replication slave on *.* to '아이디'@'%'
Master /etc/my.cnf 파일에 아래내용 입력
log-bin=mysql-bin
server-id=1 (숫자 입력해야 함)
Mysql 재시작
systemctl restart mysqld
Master mysql에서 show master status; 입력
위의 내용을 slave에 넣어야 하므로 slave 접속
slave에서 vi안되는 현상 발견 (툴이 거의 없다고 봐야 됨)
apt-get update
apt-get install vim 설치
Slave /etc/mysql/my.cnf 파일에 아래내용 입력
server-id=2
replicate-do-db=’TSCPDB4’
Mysql 접속해서 Master에 대한 정보 입력
mysql> change master to
-> master_host='마스터아이피',
-> master_user='아이디',
-> master_password='비밀번호',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=6274;
#빠져나와서 docker restart mysql-slave 실행
$ docker restart mysql-slave
#slave 들어가서 slave 상태 확인
$ mysql> show slave status\G;
Last_Errno : 0
Last_IO_Errno : 0 이 찍혀야 함