카이도스의 Tech Blog

MySQL Replication 구성 본문

MYSQL Replication

MySQL Replication 구성

카이도스 2022. 8. 3. 13:17
728x90
반응형

[MySQL-Replication 구성하기]

2대의 서버로 구성

MySQL버전 : 5.7

1. Master - Slave 형태
서버1 : Master(1IP)
서버2 : Slave(2IP)

CentOS Linux release 7.9.2009 (Core) / Apache/2.4.33 / mysql Ver 14.14 Distrib 5.7.21

PHP 7.2.4

[Master 서버 DB, 계정정보]

IP : 1IP(Master), 2IP(Slave)

DadaBases : repl_db

ID : user2

PW : 1q2w3e4r**

 

[Replication 계정 정보]

IP : 1IP - (Master)

ID : repl_user

PW : 1q2w3e4r**

Replication : 복제
DB 이중화 방식 중 하나로 MySQL에서는 Replication(복제)이라는 기능을 제공하여 Master(#1)와 Slave(#2)간의 데이터 복제를 가능하게 한다.
MySQL은 bin-log라고 하는 binary log에 변경된 정보를 기록하며, Slave(#2)가 Master(#1) 측에서 변경된 정보를 기록한 binary log를 읽어 본인의 DB에 저장하여 복제가 이루어진다.
그럼 MySQL Replication을 구성하기 위한 Master와 Slave에서 설정방법에 대해 알아보자.

 

1) MySQL DB, 계정생성 및 권한설정, 리플리케이션 계정생성

mysql 로그인 후 아래처럼 진행.

 

DB 생성

mysql> create database repl_db default character set utf8;

계정생성

mysql> create user user2@'%' identified by '1q2w3e4r**';

권한부여

mysql> grant all privileges on repl_db.* to user2@'%' identified by '1q2w3e4r**';

리플리케이션 계정생성

mysql> grant replication slave on *.* to 'repl_user'@'%' identified by '1q2w3e4r**';

 

 

2) my.cnf 설정

# vi /etc/my.cnf [mysqld] 쪽에

server-id는 1부터 2^32까지 아무 숫자나 기입해도 되지만 Master는 기본적으로 1번으로 하는것이 좋다.

3) mysql 재구동

# mysqldump -uroot -p --all-databases > dump.sql

 

 

 

 

1) my.cnf 설정

# vi /etc/my.cnf [mysqld] 쪽에

 

2) insert Database dump

마스터에 덤프파일 슬레이브서버로 옮긴다음 실행

(Master에서 dump로 받은 sql문을 통해 복제할 database를 넣어준다.)

3) Change Master to

mysql 로그인 후 아래 진행

mysql> stop slave;

mysql> reset slave;

mysql> use repl_db;

mysql> CHANGE MASTER TO

MASTER_HOST='1IP',

MASTER_USER='repl_user',

MASTER_PASSWORD='1q2w3e4r**',

MASTER_LOG_FILE='mysql-bin.000006',

MASTER_LOG_POS=154;

mysql> start slave;

4) 기타

마스터서버로 돌아와서 mysql 접속 후

mysql ((none))>UNLOCK TABLES;

생각해보니 테스트 테이블 안만들었음;;

mysql >use repl_db;

CREATE TABLE `professor2` (
`NO` int(11) NOT NULL,
`CLASS` char(10) DEFAULT NULL,
PRIMARY KEY (`NO`)
);

 

mysql (repl_db)>show tables;

5)확인

mysql (mysql)>show processlist\G

mysql (mysql)>show slave status\G

확인하면 위와같은 내용이다.

하지만 슬레이브서버에서 테이블이 확인안된다.

양서버 방화벽에서 3306포트 허용 후 (아래 진행)

# systemctl stop mysql

# systemctl start mysql

# systemctl status mysql

 

 

드디어 슬레이브에서 테이블이 보인다...

6) 경로 수정

마스터 서버 mysql 접속하여 진행

mysql ((none))>select @@datadir

# ln -s /usr/local/mysql/data /home/MYSQLDATA

# cd /home/

# ll

# mkdir MYSQLLOGS

# chown mysql. MYSQLLOGS

# cd /usr/local/mysql

# cp -av data data_(작업 전 백업)

# mv /usr/local/mysql/data /home/

# mv data MYSQLDATA

# vi /etc/my.cnf

datadir 변경

# ln -s /home/MYSQLDATA /usr/local/mysql/data

mysql 재시작

mysql 접속하여 변경 됐는지 확인

에러로그 확인

로그 종류

Error log

General log

Slow Query log

Relay Log

 

확인명령어

mysql> SHOW VARIABLES LIKE 'slow_q%';

mysql> SHOW VARIABLES LIKE 'general_log%';

mysql> SHOW VARIABLES LIKE 'log_err%';

mysql> SHOW VARIABLES LIKE 'long_query%';

mysql> SHOW VARIABLES LIKE 'relay%';

# vi /etc/my.cnf(아래와 같이 변경)

[mysqld]에 넣기

#slow-queries

slow_query_log = ON

slow_query_log_file = /home/MYSQLLOGS/mysql_slow.log

#general log

general_log = ON

general_log_file = /home/MYSQLLOGS/mysql_general.log

#log_err

log-error = /home/MYSQLLOGS/mysql_error.log

# relay

max-relay-log-size = 100M

master-info-file = /home/MYSQLLOGS/master.info

relay-log = /home/MYSQLLOGS/db1-relay-log.bin

relay-log-info-file = /home/MYSQLLOGS/db1-relay-log.info

relay-log-index = /home/MYSQLLOGS/db1-relay-log.index

slave-skip-errors = all

mysql 재시작 후 확인(재시작이 안된다)

cent7 이슈로 아래작업 진행 후 재시작

# cd /home/MYSQLLOGS

# touch mysql_error.log

# chown mysql. mysql_error.log

 

데이터 잘 동기화되는지 테스트

mysql>INSERT INTO professor2(NO, CLASS) VALUES('1-1', 'HIGH');

mysql (repl_db)>select * from professor2;(슬레이브서버에서 확인)

권한나누기

마스터에서

mysql ((none))>REVOKE all privileges on repl_db.* from user2;

mysql ((none))>grant insert, update, delete on repl_db.* to user2 ;

슬레이브에서

mysql ((none))>REVOKE all privileges on repl_db.* from user2;

mysql ((none))>grant select on repl_db.* to user2 ;

양서버에서 권한 확인

mysql ((none))>show grants for user2;

 

728x90
반응형

'MYSQL Replication' 카테고리의 다른 글

MySQL Replication 복구  (0) 2022.08.03
MySQL Dual-Master 구성하기  (0) 2022.08.03
Comments