1 Replecation
- 데이터베이스의 데이터가 갈수록 대용량화돼 가는 것을 생각하면 확장성은 DBMS에서 아주 중요한 요소이다
- MySQL의 복제는 레플리케이션이라고도 하는데, 복제는 2대 이상의 MySQL 서버가 동일한 데이터를 담도록 실시간으로 동기화 하는 기술이다.
- 복제에는 INSERT나 UPDATE와 같은 쿼리를 이용해 데이터를 변경할 수 있는 MySQL서버(마스터)와 SELECT 쿼리로 데이터를 읽기만 할 수있는 MySQL서버(슬레이브)로 나뉜다.
- 서버의 복제에서는 머스터는 반드시 1개이며 슬레이브는 1개 이상으로 구성될 수 있다.
2 마스터
- INSERT나 UPDATE와 같은 쿼리를 이용해 데이터를 변경할 수 있는 MySQL서버를 마스터라고 한다
- MySQL의 바이너리 로그가 활성화되면 어떤 MySQL 서버든 마스터가 될 수 있다.
- 애플리케이션의 입장에서 본다 면 마스터 장비는 주로 데이터가 생성 및 변경, 삭제되는 주체(시작점)이라고 볼 수 있다.
- 일반적으로 복제에 참여하는 여러 서버 가운데 변경이 허용되는 서버는 마스터로 한정할 때가 많다.
- 그렇지 않은 경우 복제되는 데이터의 일관성을 보장하기 어렵기 때문이다.
- 슬레이브 서버에서 변경 내역을 요청하면 마스터 장비 는 그 바이너리 로그를 읽어 슬레이브로 넘긴다.
- 마스터 장비의 프로세스 가운데 "Bimlog dump"라는 스레드가 이 일을 전담하는 스레드다.
3 슬레이브
- SELECT 쿼리로 데이터를 읽기만 할 수있는 MySQL서버를 슬레이브라고 한다
- 데이터(바이너리 로그)를 받아 올 마스터 장비의 정보(IP주소와 포트 정보 및 접속 계정)을 가지고 있는 경우 슬레이브가 된다. (마스터나 슬레이브라고 해서 별도의 빌드 옵션이 필요하거나 프로그램을 별도로 설치해야 하는 것은 아니다.)
- 마스터 서버가 바이너리 로그를 가지고 있다면 슬레이브 서버는 릴레이 로그를 가지고 있다.
- 슬레이브 서버의 I/O 스레드는 마스터 서버에 접속해 변경 내역을 요청하고 받아 온 변경 내역을 릴레이 로그에 기록한다.
- 그리고 슬레이브 서버의 SQL 스레드가 릴레이 로그에 기록된 변경 내역을 재실행함으로써 슬레이브의 데이터를 마스터와 동일한 상태로 유지한다.
- I/O 스레드와 SQL 스레드는 마스터 MySQL에서는 가동되지 않으며, 복제가 설정된 슬레이브 MySQL 서버에서 자동적으로 기동하는 스레드다.
4 주의사항
4.1 슬레이브는 하나의 마스터만 설정 가능
- 슬레이브는 하느의 마스터만 가질 수 있다
- 하나의 마스터에 N개의 슬레이브가 일반적인 형태이다
4.2 마스터와 슬레이브의 데이터 동기화를 위해 슬레이브는 읽기 전용으로 설정
- 마스터와 슬레이브로 복제가 구성된 상태에서는 데이터는 마스터로 접속해서 변경해야한다
- 실수로 일부 데이터를 슬레이브에서 실행한다면 데이터 동기화에 상당한 노력이 필요하다
- 따라서 사용자 실수를 막기위해 슬레이브는 읽기 전용 (read_only)으로 설정하는 것이 일반적