1. Mysql Replication이란?
DB의 복제를 의미하며, Master와 Slave로 구성됩니다.
- Master 역할 : 데이터 등록/수정/삭제 시 Binarylog를 생성하여 Slave 서버에 전달합니다. 주로 등록,수정,삭제 용으로 사용합니다.
- Slave 역할 : Master에게 전달받은 Binarylog를 읽어 DB에 반영합니다. 주로 읽기 용으로 사용합니다.
2. 사용 목적
3. 주의 사항
- 호환성을 위해 Master와 Slave의 Mysql 버전이 동일하게 맞추는 것이 좋습니다.
- 버전이 다른 경우 Slave DB 서버가 상위 버전이어야 합니다.
- Master DB 서버, Slave DB 서버 순으로 가동시켜야 합니다.
4. Linux 및 Mysql 기본 정보
CentOS7 환경 또는 Mysql 설치가 되지 않았다면 아래 링크를 따라 진행해주세요.
https://bamdule.tistory.com/20?category=365232
https://bamdule.tistory.com/22?category=365232
mysql DB 이중화 작업 진행 시 편의를 위해 root 계정을 이용하겠습니다.
5. Master
1) mysql 접속
2) 테스트 DB 생성
- create database testdb default character set utf8;
3) Slave에서 접속할 계정 생성
- grant replication slave on *.* to 'test_slave'@'%' identified by '!@#QWEasd123';
4) 테스트 Table 생성
create table t_user (
id INT AUTO_INCREMENT Primary key,
name VARCHAR(30)
);
5) Master 서버 실행 및 설정
...
[mysqld]
...
log-bin=mysql-bin
server-id=1
...
server-id 와 binarylog 파일 명을 입력해줍니다.
- mysql 재시작
- mysql 접속
- show master status;
- File명과 Position 번호를 메모장에 적어 두세요.
- 주의) DB 재시작 시 File명과 Position 번호가 변경될 수 있습니다.
6. Slave
1) /etc/my.cnf 수정
...
[mysqld]
...
log-bin=mysql-bin
server-id=2
...
- mysql 재시작
- mysql 접속
- DB 생성
- create database testdb default character set utf8;
- Table 생성
create table t_user (
id INT AUTO_INCREMENT Primary key,
name VARCHAR(30)
);
change master to
master_host='192.168.152.132',
master_user='test_slave',
master_password='!@#QWEasd123',
master_log_file='mysql-bin.000001',
master_log_pos=154;
master_host : master host
master_user : master mysql 계정 (만들어둔 slave용 계정을 이용하자)
master_password : master의 slave용 계정 비밀번호
master_log_file : 바이너리로그 파일
master_log_pos : master position
master와 slave의 연결 정보 및 상태정보가 출력됩니다.
하지만 여러가지 이유로 연결이 안되는 경우가 있습니다.
error connecting to master 'test_slave@192.168.152.133:3306' - retry-time: 60 retries: 5
여러 정보 중 위 메시지가 있다면, 60초마다 접속을 시도했고, 5번의 시도에도 성공하지 못했다는 의미입니다.
여러 이유 중 하나는 방화벽 문제입니다. Master 서버에서 3306포트가 열려있지 않다면 Slave 서버에서 접속 할 수 없습니다.
7. Master서버와 Slave서버 간 연결 테스트
mysql -h마스터서버IP -utest_slave -p
master 서버로 mysql 접속이 되는지 확인해 봅니다.
위와 같이 출력된다면 3306포트가 막혀있을 확률이 높습니다.
Master 서버에서 3306포트를 열어 줍니다.
systemctl status firewalld
방화벽이 실행되고 있는지 확인 합니다.
firewall-cmd --zone=public --add-port=3306/tcp
3306 포트를 열어줍니다. success 라는 문구가 출력되었다면 성공한 것입니다.
mysql -h마스터서버IP -utest_slave -p
Master 서버에 접속된 것을 확인하실 수 있습니다.
위와 같이 했음에도 연동이 되지 않는 다면, Master와 Slave간 설정이 잘되었는지 한번만 더 확인해주시기 바랍니다.
8. DB 이중화 테스트
- Master 서버 Mysql 접속
- use testdb;
- t_user 테이블에 테스트 데이터 삽입
- Slave 서버 Mysql 접속
- use testdb;
- t_user 테이블에 Master DB에서 입력한 데이터가 삽입되었는지 확인
이것으로 DB 이중화 포스팅을 마치겠습니다.