Skip to content

DB Replication을 위한 데이터베이스 환경 설정 (Master, Slave)

ggyool edited this page Nov 5, 2021 · 4 revisions

+추가

DB Replication 이론 관련 참고 자료

Slave 인스턴스에 데이터베이스 설치하기

Master 데이터베이스인 main-db의 maria db 버전 이 버전과 같거나 높은 버전의 maria db를 SLAVE 데이터베이스를 설치해야한다.

$ mysql --version
mysql  Ver 15.1 Distrib 10.4.21-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

순서

1. main-db-slave1 이라는 이름으로 ec2 인스턴스를 생성하였다. 2. DB 설치 전 timezone을 KST로 설정하였다.

$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
$ date
Fri Sep 10 00:20:18 KST 2021

3. apt 업데이트, 업그레이드한다.

$ sudo apt update && sudo apt-get -y upgrade

4. marai db 설치

$ sudo apt-get install -y mariadb-server

5. maria db 버전 확인

$ mysql --version;
mysql  Ver 15.1 Distrib 10.1.48-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

6. root 패스워드 변경

$ sudo mysql -u root
[mysql]> use mysql;
[mysql]> update user set password=password('원하는 비밀번호') where user='root';
[mysql]> update user set plugin='mysql_native_password' where user='root';
[mysql]> flush privileges;

7. 새로운 유저를 만들고 싶다면

[mysql]> grant all privileges on *.* to '유저명'@'%' identified by '비밀번호';
[mysql]> flush privileges;
*.* (디비.테이블)
'%' 외부에서도 접근가능, 내부에서만 접근하려면 localhost



Master 인스턴스 설정하기

1. my.cnf 에 아래 설정을 추가한다.

$ sudo vi /etc/mysql/my.cnf
[mysqld]
log-bin = mysql-bin
server-id = 1
binlog_format = row
expire_logs_days = 30

mysql-bin: binary log의 파일명
server-id: master와 slave의 값만 다르면 됨, 아무 숫자나 사용 가능
binlog_format: 유형을 선택한다(STATEMENT, ROW, MIXED 중 선택)
expire_logs_days: 보관기간 설정

2. maria db 재시작

$ sudo service mysqld restart

3. mysql 접속 4. Slave에서 접속할 계정 생성

[mysql] grant replication slave on *.* to 'slave_db'@'%' identified by '비밀번호!';

5. binary log 파일명과 위치를 기억해두기 (주의. DB 재시작시 File과 Position 변경 가능성 있음)

[mysql] show master status;

이 때 나오는 file 명과 Position을 기억해두자.



mysqldump를 사용하여 데이터 전달하기

Master 데이터베이스에 이미 데이터들이 있는 상태이기 때문에 mysqldump를 이용해서 Slave로 옮겨줘야한다.

1. Master 인스턴스 - 덤프 파일 만들기

$ sudo mysqldump -u root -p --databases botobo > dumpbotobo.sql

botobo: 데이터베이스명
dumpbotobo.sql: 파일 이름

2. Master -> Slave 로 dump 파일 전송 만약, scp가 안 먹히면 접속할 권한이 없는 거니까 뚤어주기

$ scp /home/ubuntu/dumpbotobo.sql ubuntu@[slave-ip]:/home/ubuntu/.

3. Slave 로 접속 -> mysql 접속 -> 데이터베이스 생성

[mysql] CREATE DATABASE botobo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

4. Slave 에 dump 파일 실행하고 확인하면 데이터가 옮겨져 있을거임

$ sudo mysql -u root -p botobo < dumpbotobo.sql



Slave 인스턴스 설정하기

1. my.cnf 에 아래 설정을 추가한다.

$ sudo vi /etc/mysql/my.cnf
[mysqld]
server_id = 2
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1

2. maria db 재시작

$ sudo service mysqld restart

3. mysql 접속 4. Master와 연동 설정

[mysql] change master to 
master_host='[masster 아이피]', 
master_user='이전에 만든 Slave 접속용 유저',
master_password='비밀번호', 
master_log_file='[binary log 파일명]',
master_log_pos=[binary log 위치];

5. 실행 [mysql] start slave;
6. Slave 상태 확인 [mysql] show slave status;

debugging keyword

netstat -nap | grep 3306

vi /etc/mysql/mariadb.conf.d/50-server.cnf 
bind-address: 0.0.0.0
stop slave; reset slave all;
Clone this wiki locally