728x90
준비물
두 개의 서버 (Master로 쓸 서버와 Slave로 쓸 서버)
진행한 OS
MySQL Replication이란?
DB 복제를 의미하며, Master와 Slave로 구성된다.
더보기
- Master 역할 : 데이터 등록/수정/삭제 시 Binarylog를 생성하여 Slave 서버에 전달한다. 주로 등록/수정/삭제 용도로 사용한다.
- Slave 역할 : Master에게 전달받은 Binarylog를 읽어 DataBase에 반영한다. 주로 읽기 용도로 사용한다.
사용 목적 : 실시간 데이터 백업과 DB 서버의 부하 분산
[ 주의 사항 ]
1. Master와 Slave의 MySQL 버전을 동일하게 맞추는 것이 좋다. 버전이 다를 경우 Slave의 DB 서버가 상위 버전이어야 한다.
2. Master DB 서버 → Slave DB 서버 순서로 가동시켜야 한다.
MySQL 설치 방법
Master 서버와 Slave 서버 둘 다 MySQL이 없다면 둘 다 동일한 명령어를 입력하면 된다.
# yum을 이용해 MySQL을 설치한다.
yum install http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# mysql-community-server를 설치한다.
yum install mysql-community-server
# 아래 명령어로 정상적으로 설치가 되었는지 확인한다.
yum repolist enabled | grep "mysql.*-community.*"
나중에 또 삭제해야될 거 같으니 미리 명령어 백업. 더보기로 볼 수 있다.
더보기
# MySQL 설치 확인
yum list installed | grep mysql
# MySQL 패키지 삭제
yum remove -y mysql-community-*
# MySQL 폴더 삭제
rm -rf /var/lib/mysql
# RPM 설치 확인
rpm -qa | grep mysql
# RPM 설치 삭제
rpm -e mysql
# 까지 작성후 tab으로 자동완성
# RPM 파일 확인
find / -name 'mysql*rpm'
# RPM 파일 제거
rm -rf (find로 찾은 파일경로)
# 설치가 완료 되었다면 mysql을 실행한다.
systemctl start mysqld
# 실행이 완료 되었는지 확인하고 싶다면 아래 명령어를 입력한다.
systemctl status mysqld
# mysql 실행 후 mysqld.log를 열어 임시 비밀번호를 확인한다.
vi /var/log/mysqld.log
# vi 편집기에서 [Note] 라고 적혀 있는 곳을 찾아서 맨 끝을 보면 임시 비밀번호가 있다.
# 아래에 참고 사진을 첨부
# 이미지가 작으니 클릭해서 봐야 한다.
# 임시 비밀번호를 확인 했으면 MySQL root 계정에 로그인한다.
# Ctrl + C로 복사해서 Shift + Insert 로 붙여넣을 수 있다.
mysql -u root -p
# 로그인이 완료 되었다면 비밀번호를 재설정 한다.
# 비밀번호는 영어 대문자 + 소문자 + 숫자 + 특수문자 로 조합되어야 한다.
ALTER USER 'root'@'localhost' IDENTIFIED BY '바꿀 비밀번호';
# 저장
FLUSH PRIVILEGES;
MySQL ( Master 서버 )
# DB를 생성한다.
# CREATE DATABASE DB이름 DEFAULT CHARACTER SET utf8;
CREATE DATABASE testdb DEFAULT CHARACTER SET utf8;
# DB 목록을 조회한다.
SHOW databases;
# 사용할 DB를 선택한다.
# USE DB이름
USE testdb;
# Slave에서 접속할 계정을 생성
# MySQL 8.0 미만
GRANT REPLICATION slave ON *.* TO 'test_slave'@'%' IDENTIFIED BY '비밀번호';
# MySQL 8.0 이상
CREATE USER 'test_slave'@'%' IDENTIFIED BY '비밀번호';
GRANT REPLICATION slave ON *.* TO 'test_slave'@'%' WITH GRANT OPTION;
# 테스트 Table 생성
CREATE TABLE t_user (
id INT AUTO_INCREMENT Primary key,
name VARCHAR(30)
);
Master 서버 실행 및 설정
# 설정을 위해 MySQL 나가기
exit
# vi 편집기로 설정하기
vi /etc/my.cnf
# [mysqld]에 아래 내용을 추가한다.
#추가
log-bin=mysql-bin
server-id=1
# 설정 후 MySQL 재실행
systemctl restart mysqld
# MySQL 접속
mysql -u root -p
# 아래 명령어 실행
SHOW master status
# logfile에 대한 정보로 slave가 master의 정보를 가져오기 때문에
# File과 Position의 정보는 따로 적어두어야 한다.
# 주의 : DB 재시작시 File명과 Position 번호가 변경될 수 있다.
MySQL ( Slave 서버 )
# vi 편집기로 설정하기
vi /etc/my.cnf
# [mysqld]에 아래 내용을 추가한다.
#추가
log-bin=mysql-bin
server-id=2
# 설정 후 MySQL 재실행
systemctl restart mysqld
# MySQL 접속
mysql -u root -p
# DB를 생성한다.
# CREATE DATABASE DB이름 DEFAULT CHARACTER SET utf8;
CREATE DATABASE testdb DEFAULT CHARACTER SET utf8;
# DB 목록을 조회한다.
SHOW databases;
# 사용할 DB를 선택한다.
# USE DB이름
USE testdb;
# Table을 생성한다.
CREATE TABLE t_user(
id INT AUTO_INCREMENT Primary key,
name VARCHAR(30)
);
# Master 연동 설정
CHANGE master to
master_host='Master IP(클라우드의 경우 사설IP로)',
master_user='Master 계정(만들어둔 slave계정)',
master_password='비밀번호',
master_log_file='복사해두었던 File 값',
master_log_pos=복사해두었던 Position 값;
# 예시
CHANGE master to
master_host='123.456.789.321',
master_user='test_slave',
master_password='password1234@!',
master_log_file='mysql-bin.000002',
master_log_pos=156;
# Slave 실행
START slave;
# Slave 상태 확인
SHOW slave STATUS\G;
# 확인해야 하는 부분
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
# 둘 다 Yes로 되어있어야 한다.
Master 서버와 Slave 서버 간 연결 테스트
# 테스트를 위해 Master 서버에 연결되어있던 root 계정에서 벗어난다.
exit
# 테스트를 위해 해당 mysql로 접속을 시도한다.
mysql -h마스터서버IP -u유저이름 -p
# ex) mysql -h123.456.789.321 -utest_slave -p
이중화 테스트
# Master 서버
# 이중화 테스트를 위해 다시 Master 서버 Mysql은 root로 로그인한다.
exit
mysql -u root -p
# 로그인 후 testdb에 다시 접근한다.
USE testdb;
# testdb에 있는 t_user 테이블에 데이터를 추가한다.
insert into t_user values(1, 'test');
# -------------
# Slave 서버
# 값이 정상적으로 들어왔는지 확인하기 위해 testdb에 접근한다.
USE testdb;
# testdb에 있는 t_user테이블에 정상적으로 데이터가 들어왔는지 확인한다.
select * from t_user;
728x90
반응형
'회사 > 과제' 카테고리의 다른 글
LVM (0) | 2022.01.03 |
---|---|
리눅스 기본 명령어 50개 (0) | 2021.12.30 |
Apache + Tomcat 연동 / 고양이 페이지 (0) | 2021.12.28 |
APM 설치 (0) | 2021.12.28 |
Fail2ban (1) | 2021.12.28 |