일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DataGridView 직접 입력
- pm2 시작
- transfer
- invalid data
- listener 1883
- 데이터테이블 데이터 넣기
- pm2
- pm2 상태 확인
- html #select #option #multiple
- allow_anonymouse
- setInterval clear
- map이 undefined가 뜰 때
- setInterval 중지
- AntDesign
- 1883
- setInterval 정지
- pm2 확인
- datagridview 직접입력
- DatePicker
- mosquitto
- setInterval 외부 정지
- mosquitto.conf
- c# datagridview 데이터 넣기
- Replication
- mySQL_Replication
- 서버동기화
- 공인IP
- timepicker
- pm2 설치
- 맥 어드레스
- Today
- Total
개발 노트
MySQL - SQL Replication 본문
레플리케이션은 마스터 와 슬레이브로 나눠서 데이터를 복제한다.
우선 데이터 복제는 방식에 따라 두가지로 나뉜다.
동기 - Master 수정 -> 즉시 Slave 수정 -> 적합성이 높다
비동기 - Mster 수정 -> 잠시 후 Slave 수정 -> 성능이 높다 두가지를 합치면 semi-sync라고 있다더라.
Replication의 방식은 다양하다. (기본적으로는 비동기 복제 방식을 따른다.)
기본적으로 Master 노드에서 변경되는 데이터에 대한 이력을 로그(Binary Log)에 입력(기록)하면 Replication Master Thread가 비동기적으로 이를 읽어서 Slave쪽으로 전송하는 방식.
동기 - 모든 변화에 대해 Slave의 적용에 대한 응답을 수신
└ 트랜잭션 도중 발생되는 변경에 대해서는 비동기로 작동하다가 Commit 단계에만 Slave 응답을 수신하도록 가능
비동기 - 파일의 로그를 별도의 스레드가 읽어서 Slave로 전송하는 방식
└ 트랜잭션을 수행하는 스레드가 직접 Slave로 변경 사항을 전송하도록 구현될 수도 있을 것이다.\
**트랜잭션은 데이터베이스를 상태를 바꾸는 일종의 작업 단위이다.
아래는 레플리케이션 진행 순서이다.
Replication을 위해 반드시 필요한 요소
- Master에서의 변경을 기록하기 위한 Binary Log
- Binary log를 읽어서 Slave쪽으로 데이터 전송을 위한 Master Thread
- Slave에서 데이터를 수신하여 Relay Log에 기록하기 위한 I/O Thread
- Relay Log를 읽어서 해당 데이터를 Slave에 Apply(적용)하기위한 SQL Thread
**위의 사진에서 바이너리 로그를 전송할 때는 비동기적으로 전송한다.
데이터 -> 다른 노드로 복제하는 상황에서 여러 방식이 있다.
1. SQL전송 Replay방식 - SBR(Statement Baseed Replication - 로그의 크기가 작다.
2. 변경되는 Row데이터 전송->복제 - RBR(Row Based Replication) - 데이터 적합성 유리.
3. 위의 방식들을 섞은 MBR(Mixed Based Replication) - 평상시에는 SBR, 비결정성(Unsafe Statement)를 만나면? RBR로 기록
SQL의 성격, 데이터 양을 고려해서 방식을 선택하면 된다.
Replication 구성 요소들 설명
1. Master Thread
Master Thread = 서버라고 보면된다, Slave Thread가 클라이언트로써 접속요청을 할 시에 마스터에는 Slave가 로그인 할 수 있는 계정과 권한이 필요하다.
Master쪽으로 동시에 다수의 Slave Thread가 접속 할 수 있기에, Master Thread와 Slave Thread는 1:1 대응이다.
└한가지 역할 수행 = Binary Log를 읽어서 Slave로 전송 -> Binlog Sender 또는 Binlog Dump라고도 불린다.
Slave의 접속은 Client와 다를바 없다.
-> 접속 후 Binary log의 송신을 요청하는 명령어를 쏴야한다.
(COM_BINLOG_DUMP와 COM_BINLOG_DUMP_GTID)
└Binary Log 파일명과 포지션에 의해 16GTID에 의해 Binary Log 포지션 결정
**Position은 실제 파일의 바이트 수를 의미한다.
위의 작업 이후에 COM_QUERY라는 Protocol을 통해 실제 데이터(SQL)송신을 요청한다.
2.Slave I/O Thread
연속적으로 수신한 데이터를 로그파일에 순차적 기록
Relay Log Format(방식) = Binary Log Format = 둘의 방식은 동일한다(인덱스 파일 존재o, 파일명에 6자리 숫자가 붙음o)
└Replication 시작시 자동 생성(Relay log를 확인하는 명령어 = SHOW RELAYLOG EVENTS)
3.Relay Log
파일의 기본적인 이름은 '호스트명-relay-log'이며 호스트 이름이 변경될경우 오류 발생의 위험이 있으니 relay_log옵션을 이용하여 의도적으로 정해야 한다.
4.Slave SQL Thread
relay log의 변경 데이터를 읽어서 스토리지 엔진을 통해 slave측에 replay(재생)하는 Thread이다.
처리량과 연산량이 I/O < SQL이다. 왜? DB내의 실제 내용을 변경하기 때문이다.
└이는 Replication처리의 병목지점이 될 수 있다는 것을 의미한다.
Master측은 많은 수의 Thread가 변경을 발생시키고 있는데
Slave에서는 하나의 SQL Thread가 DB반영 작업을 수행하기 때문이다.
=> MTS 등장 => SQL Thread가 병렬로 DB 갱신 수행
'데이타베이스 > MySQL' 카테고리의 다른 글
Nodejs -> mysql 대량의 값을 insert 또는 delete (0) | 2023.04.25 |
---|---|
mySQL Replication A to Z mySQL 동기화 (0) | 2023.01.19 |
mySQL DATETIME 타입 (0) | 2022.12.09 |
Query (0) | 2022.11.21 |
sql (0) | 2022.04.19 |