[MYSQL]replication & mysql 이중화 (master,slave)

2020. 7. 13. 17:45 Database/mysql
MYSQL replication & mysql 이중화 (master,slave)

  1. Master 작업

 

1-1. Slave 계정 생성

Grant replication slave on *.* to slave@'192.168.0.*' identified by ' passwd';

1-2. master(DB) 백업

Mysqldump -u root -p dbname > dump.sql

1-3. dump 파일 slave 서버로 전송

FTP 이용  SCP 

scp dump.sql user(계정)@IP:.

1-4. /etc/my.cnf 내용추가

log-bin=mysql-bin

server-id       = 1

1-5. mysql restart

1-6 show master status;

(File 번호 ,Position 번호 메모)

 

  1. Slave 작업 (Slave 서버가 Master서버로 운영되기위해선 1-1 항목 필수 추가)

 

1-1. /etc/my.cnf 내용 추가

Server-id=2

replicate-do-db='dbname' (연동하려는 Dbname ,2개의 Dbname 기재 시 동일내용으로 한 줄 추가)

log-slave-update (Slave 서버가 Master서버로 운영 필수 항목설명 아래 참조)

read-only = 1 (slave 서버에 대한 쓰기를 제한할경우 사용 / my.cnf  등록 / root 계정의 경우에는 쓰기가 가능하다.)

1-2. dbname 생성 (Master 에서 연동하려는 Dbname 과 동일한 Dbname 생성)

Create database dbname;

1-3. DB import

Master DB dump 파일을 import

Mysql -u root -p dbname < dump.sql

1-4. Replication master 서버 정보 설정 (host IP Master)

Change master to

Master_host='192.168.0.*',

Master_user='slave',  <--임의지정

Master_password='passwd',

Master_log_file='mysql-bin.000001',

Master_log_pos=326;

1-5. Mysql 재 시작

 

  1. 확인

 

1-1. Master 서버에서 show master status;

File / Position 번호

1-2. Slave 서버에서 show slave status;

File / Position 번호

1-3. 위의 정보가 동일하면 완료.

 

  1. TEST (참조:http://ijj.kr/220495833461)

 

사용자생성 grant all privileges on pakmunsung2_godo_co_kr.* to ceraondb@localhost identified by 'pakmunsun*#fkd2'; )

 

1-1. 테이블 생성

CREATE TABLE MT (mountain char(20),altitude int );

 

tip : create database database_name; ( 데이터베이스 생성 )

 

1-2. select

Select * from MT;

1-3. insert

insert into MT(mountain, altitude) values("설악산",1708);

insert into MT values("지리산", 1915 );

1-4. delete

Delete from MT where altitude='1708';

1-5. update

 update MT set altitude ="2000" where altitude="1915";

1-6. drop

drop table MT;

 

flush privileges ( 재적용 )


---마무리 되었습니다. 지금까지의 테스트 master - slave / slave(master) - slave 가 가능 합니다.

시간 문제로, TEST 부분은 잘 정리된 블로그 에서 확인한 정보를 제공 합니다.


  1. 정보  이해

 

일단 log-slave-update에 대해서 이해를 하셔야 할 겁니다.

일반적으로 마스터 - 슬레이브/마스터 - 슬레이브를 구성하기 위해서

 

A (master)

--------

server-id=...

log-bin=/...

.

 

B ( slave/master)

---------

master-host = ...

master...

.

.

server-id=

log-bin=..

 

 

C ( slave )

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

master-host = B server

.

 

중요한 것은 MySQL의 Replication은 binary log를 읽어온다는 것입니다.

이렇게 세팅을 할 경우

 

A서버에서 사용자가 입력하는 문장은 A서버에 binary log로 남습니다.

B서버에서 사용자가 입력하는 문장은 B서버에 binary log로 남겠죠

 

B 서버는 그와 별도로 A서버의 binary log를 읽어와서 자기한테 적용을 하고 C서버는 B서버의 binary log를 읽어와서 자기한테 적용을 합니다.

 

그러면 여기에서 A서버에서 기록된 binary log를 B서버에서 읽어와서 자기한테 적용을 할 때 그건 B자신의 binary log에 남기는가 하는 것이죠. 이게 기본으로는 적용이 되지 않습니다. 그렇기 때문에 위와 같은 설정으로 세팅을 했을 경우에는.

 

( A , B )  ( B, C ) 이런 형태의 Replication이 구성이 되는 것이죠.

A에서 입력한 내용은 B에는 적용이 되지만, C에는 적용이 되지 않습니다.

 

이걸 가능하게 해 주는 옵션이 log-slave-update 입니다. log-slave-update 옵션이 켜져 있는 상황에서는 master에서 받아온 log에 대해서도 자기 log에 기록을 하게 됩니다.

 

위의 내용에서

 

B ( slave/master)

---------

master-host = ...

master...

 

 

server-id=

log-bin=..

log-slave-updates

 

문장만 추가해서 사용 가능합니다.



출처: https://applejara.tistory.com/544 [애플자라]