카이도스의 Tech Blog
MySQL Replication 구성 본문
[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;
'MYSQL Replication' 카테고리의 다른 글
MySQL Replication 복구 (0) | 2022.08.03 |
---|---|
MySQL Dual-Master 구성하기 (0) | 2022.08.03 |