Replication(복제)는 데이터베이스 시스템에서 사용되는 개념
복제는 주로 데이터의 가용성, 내구성, 성능 향상, 데이터 분석 및 로드 분산 등의 목적으로 사용
데이터베이스의 변경 사항을 한 서버에서 다른 서버 또는 여러 서버로 자동으로 복사하는 프로세스
➡️ 데이터베이스 시스템의 성능, 안정성, 확장성을 향상시키는 강력한 기능이며, 데이터베이스 관리자들에게 많은 이점을 제공함
- Docker Mobius MySQL 실행 방법
// Mobius 컨테이너 접속
docker exec -it 컨테이너명(ex:mobius) bash
// Mobius 내의 MySQL 실행
mysql -u MySQL사용자(ex:root) -p
password : 비밀번호입력
//데이터베이스 생성
CREATE DATABASE 스키마명;
//데이터베이스 선택
USE 스키마명;
[mysql] 섹션 아래에 다음 라인 추가
server-id = <유니크한 서버 아이디>
유니크한 서버 아이디는 사용자가 임의로 설정하며 중복되어서는 안된다
Slave 서버는 로컬 서버이고 ELK는 local MySQL을 사용함
MySQL의 설치 파일 경로에 my.cnf 파일이 없어 별도의 공간에 my.txt 파일을 생성한 후
[mysqld]
server-id = 1
log_bin = mysql-bin // 로그 옵션
을 입력, 저장한 후에 파일 확장자를 cnf로 바꿨음
my.cnf를 MySQL 설치파일 경로로 이동 (MySQL 서버/bin)
vi /etc/mysql/my.cnf
[mysqld]
server-id = 2
log_bin = mysql-bin
CREATE USER '사용자이름'@'SlaveMySQL호스트' IDENTIFYED BY '비밀번호';
GRANT 권한 ON 데이터베이스이름.* TO '사용자이름'@'SlaveMySQL호스트';
mysqldump -u <사용자> -p <데이터베이스> > <백업파일명>.sql;
백업파일명은 임의로 설정
GRANT PROCESS ON.* TO '사용자이름'@'SlaveMySQL호스트';
GRANT LOCK TABLES ON 데이터베이스.* TO '사용자이름'@'SlaveMySQL호스트';
ls -l <백업파일명>.sql // 파일 생성 확인
*️⃣ 권한 부여 및 백업/복원 요약
GRANT SELECT, INSERT, UPDATE, DELETE ON aquafarm.* TO replication_aqua@localhost;
GRANT PROCESS ON *.* TO '사용자이름'@'Slave_MySQL_호스트';
GRANT LOCK TABLES ON 데이터베이스.* TO '사용자이름'@'Slave_MySQL_호스트';
exit
mysqldump -u <사용자> -p <데이터베이스> > <백업파일명>.sql;
- Slave 서버의 my.cnf 수정
server-id = <로컬 MySQL 서버의 고유한 서버 ID>
log_bin = mysql-bin
binlog_do_db = <복제할 데이터베이스 이름> // 추가
- Slave MySQL 쿼리문 수행
CHANGE MASTER TO MASTER_HOST='<모비우스 MySQL 서버의 IP 주소>',
MASTER_USER='<복제를 위한 사용자 이름>',
MASTER_PASSWORD='<복제를 위한 사용자 비밀번호>',
MASTER_LOG_FILE='<모비우스 MySQL 서버의 로그 파일>',
MASTER_LOG_POS=<모비우스 MySQL 서버의 로그 위치>;
cmd에서 아래 명령어 입력
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 컨테이너명
Mobius mysql 아래 쿼리문 실행
SHOW MASTER STATUS;
FILE 및 POSTION 열의 값이 각각 FILE, POS
(혹은 Mobius MySQL 서버의 my.cnf 또는 my.ini 열어서 log.bin 옵션을 찾음
해당 옵션의 값이 FILE, log-bin-index 옵션의 값이 POS)
START SLAVE; // 복제 시작
SHOW SLAVE STATUS // 복제 상태 확인