데이터베이스/mysql

[mysql8.0.29]Centos7.4 mysql 8 replication 설정

peryh 2022. 7. 14. 10:58
728x90

준비물

OS 2대(각각 mysql 설치 필요)

설치 방법 : https://peryh.tistory.com/63

 

 

구성도

각 OS를 편의상 master(192.168.8.74), slave(192.168.8.75)로 통칭

 

 

설치 방법

켜진 DB 종료(master/slave 둘다 작업)

dbshutdown
혹은 alias 설정 없을 시
/mysql_engine/mysql/bin/mysqladmin shutdown -u root -p
ps -ef | grep mysql

 

동일한 /etc/my.cnf 설정 변경(실제 파일에 적용 시, #로 되어있는 주석은 모두 삭제 후 적용)

vi /etc/my.cnf

[master]

[client]
port=3306
socket=/mysql_data/mysql.sock
 
[mysqld]
user=mysql
authentication_policy=mysql_native_password
 
datadir=/mysql_data/data
port=3306
socket=/mysql_data/mysql.sock
pid-file=/mysql_data/mysqld.pid
 
server-id=1
log_error=/mysql_dump/error/mysql.err
log_bin=/mysql_dump/binlog/mysql-bin
relay-log=/mysql_dump/relaylog/relay-log
relay-log-index=/mysql_dump/relaylog/relay-log.index
relay_log_purge=0
sync_binlog=1
binlog_cache_size=1M
max_binlog_size=1G
binlog_expire_logs_seconds=86400
 
# Character set Config
character-set-client-handshake=FALSE
character-set-server=utf8mb4
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8

 

[slave]

[client]
port=3306
socket=/mysql_data/mysql.sock
 
[mysqld]
user=mysql
authentication_policy=mysql_native_password
 
datadir=/mysql_data/data
port=3306
socket=/mysql_data/mysql.sock
pid-file=/mysql_data/mysqld.pid
 
server-id=2                                                     ## 서버id는 고유값이므로 master와 달라야 함
log_error=/mysql_dump/error/mysql.err
log_bin=/mysql_dump/binlog/mysql-bin
relay-log=/mysql_dump/relaylog/relay-log
relay-log-index=/mysql_dump/relaylog/relay-log.index
relay_log_purge=0
 
read_only                                                      ## slave에서 읽기만 가능하게 하는 설정
 
# Character set Config
character-set-client-handshake=FALSE
character-set-server=utf8mb4
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8

 

변경 후 재기동(master/slave 둘다 작업)

dbstartup
혹은
/mysql_engine/mysql/bin/mysqld_safe --user=mysql &
ps -ef | grep mysql

 

에러 없는지 확인(master/slave 둘다 작업)

tail -10 /mysql_dump/error/mysql.err

 

mysql DB 접속 및 repl 계정 생성(master/slave 둘다 작업)

mysql -u root -p
password1!

create user 'repl'@'%' identified with mysql_native_password by 'Password1!';
grant all privileges on *.* to 'repl'@'%';
flush privileges;
select user, host from mysql.user;

 

master reset 및 정보 확인(master에서 수행)

show master status\G;
reset master;
show master status\G;

 

slave 정보 reset(slave에서 수행)

reset master;
stop slave;
reset slave;

 

master 정보 기입(slave에서 수행, relaylog 디렉터리 생성 안한 경우 에러 발생, 참고한 설치글에는 미리 생성함)

CHANGE MASTER TO
MASTER_HOST='192.168.8.74',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='Password1!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=157;

 

slave에 디렉터리 생성 및 권한 변경(slave에서 수행)

\! mkdir -p /mysql_dump/relaylog
\! chmod -R 770 /mysql_dump
\! ls -l /mysql_dump

 

다시 수행(slave에서 수행)

CHANGE MASTER TO
MASTER_HOST='192.168.8.74',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='Password1!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=157;

 

replication 수행 및 확인(slave에서 수행, 초록색 Yes 두개가 보여야 정상)

start replica;
show slave status\G;

 

 

확인(master에서 수행)

show slave hosts\G;

 

테스트(master에서 수행)

show databases;
create database test;
show databases;

 

테스트 확인(slave에서 수행)

show databases;

 

생성한 Database 삭제(master에서 수행)

drop database test;
show databases;

 

테스트 확인(slave에서 수행)

show databases;