Master-Slave 구조 혹은 Write-Read 구조로 DB서버를 구성할 때 필요한 설정이 Replication(복제) 설정이다.

Master-Slave 구조냐 Write-Read 구조냐의 차이는 문장 하나로 나눠진다.

 

정보 : CentOS 7 운영체제에 MariaDB 10.3 버전

 

 

 

1. Master 서버 설정

 

1) server.cnf 수정

vi /etc/my.cnf.d/server.cnf

아래 내용을 추가한다.

 

# 데이터베이스 이중화설정 =======

[mysqld]

server_id=1

log-basename=masterdb

log-bin

# =======================

 

MariaDB 재시작

systemctl restart mariadb

 

2) 복제용 계정 생성 및 권한부여

mysql -uroot -p mysql

> create user '복제유저ID'@'HostIP' identified by 'Password';

> grant replication slave on *.* to '복제유저ID'@'HostIP' identified by 'Password';

> FLUSH PRIVILEGES;

 

3) Master Server 상태 확인

> show master status;

+------------------------+----------+----------------+--------------------+

 | File                        | Position  | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------------+----------+----------------+--------------------+

 | masterdb-bin.000001 | 1607      |                   |                         |

+------------------------+----------+----------------+--------------------+

 

masterdb-bin.000001 값과 1607값을 기억!

 

> exit

 

방화벽 개방

firewall-cmd --permanent --zone=public --add-port=3306/tcp

 

 

 

 

2. Slave 서버 설정

1) server.cnf 수정

vi /etc/my.cnf.d/server.cnf

아래 내용을 추가한다.

 

# 데이터베이스 이중화설정 =======

[mysqld]

server_id=2

log-basename=masterdb

log-bin

report-host=slavedb

# ========================

 

MariaDB 재시작

systemctl restart mariadb

 

 

2) Master-Slave 연결 설정

mysql -uroot -p mysql

 

> show variables like 'server_id';

+-----------------+-------+

 | Variable_name | Value |

+-----------------+-------+

 | server_id         | 2      |

+-----------------+-------+

 

> change master to master_host='Master IP', master_user='복제유저ID', master_password='Password', master_port=3306, master_log_file='masterdb-bin.000001', master_log_pos=1607, master_connect_retry=10;

 

> start slave;

> show slave status \G;

Slave_IO_State: Waiting for master to send event

Master_Host: Master IP

Master_User: 복제유저ID

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: masterdb-bin.000001

Read_Master_Log_Pos: 1607

Relay_Log_File: masterdb-relay-bin.000001

Relay_Log_Pos: 5830

Relay_Master_Log_File: masterdb-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

 

강조된 항목과 일치하는 지 확인

Slave_IO_Running과 Slave_SQL_Running 값이 반드시 Yes!

 

 

 

3. 이중화 여부 테스트

 

1) Master 서버에서 데이터베이스, 테이블 생성

-------------------------------------------------------------------------------------
# mysql -uroot -p mysql

> create database sync_db;
> use sync_db;
> create table users (id int(3) primary key, name varchar(20), country varchar(20));
> INSERT INTO users (id, name, country) VALUES (1, 'admin', 'Korea');
> select * from users;

-------------------------------------------------------------------------------------

 

 

2) Slave 서버에서 데이터 확인

 

mysql -uroot -p mysql

> show databases;
> use sync_db;
> show tables;
> select * from users;

Master 서버와 Slave 서버의 데이터가 동일한지 확인.

 

 

 

* Slave_SQL_RUNNING = NO 발생 시

SQL 연결이 끊어졌을 경우, Master DB에 넣은 데이터를 Slave가 가져오지 못함.
이러한 경우에는 Master DB의 데이터가져오는 행동을 스킵시켜야함.

set global sql_slave_skip_counter=1;

 

 

 

4. Slave 서버 Read Only 설정 (읽기모드)

1) 현재 MariaDB의 read_only 설정 확인

> show global variables like "%read_only%";

 

2) read_only 모드 설정

vi /etc/my.cnf.d/server.cnf

아래 내용 추가

 

#======Read_only 설정

[mysqld]

read_only

#================

 

3) 서버 설정 변경

> SET GLOBAL read_only = ON;

> FLUSH PRIVILEGES;

 

설정 변경여부 확인

> show global variables like "%read_only%";

 

'DB서버 > MariaDB' 카테고리의 다른 글

MariaDB 데이버베이스 백업 및 이동  (0) 2021.06.08
MariaDB 계정 생성·삭제·권한 관리  (0) 2021.06.08
복사했습니다!