
MySQL에서 확장성을 위한 가장 일반적인 방법.
2대 이상의 MySQL 서버가 동일한 데이터를 담도록 실시간으로 동기화하는 기술.
마스터와 슬레이브로 나뉘는데,
마스터는 무조건 1개, 슬레이브는 1개 이상일 수 있다.
마스터, 슬레이브는 설정하는 것 뿐이다. (중복 설정도 가능하다)
마스터용 MySQL, 슬레이브용 MySQL이 나뉘어져있는 것이 아니다.
데이터 생성 및 변경, 삭제되는 시작점.
바이너리 로그가 활성화되면, 어떤 MySQL이든 마스터가 될 수 있다.
변경이 허용되는 서버는 마스터로 한정하는 경우가 많다.
그렇지 않다면 데이터의 일관성을 보장하기 힘들기 때문.
마스터에서 실행되는 데이터 구조, 내용을 변경하는 모든 query 문장은 바이너리 로그에 기록된다.
슬레이브에서 변경 내역을 요청하면, 마스터는 바이너리 로그를 슬레이브에 넘긴다.
Binlog dump라는 스레드가 이 일을 전담한다.
하나의 마스터에 10개의 슬레이브가 연결되어 있다면, Binlog dump 스레드는 10개가 표시된다.
바이너리 로그를 받아 올 마스터 장비의 정보(IP주소와 포트 정보 및 접속 계정)를 가지고 있을 경우 슬레이브가 된다.
별도의 옵션이나 프로그램이 필요한 것이 아니다.
슬레이브 서버는 릴레이 로그를 가지고 있다.
마스터와의 데이터 동기화를 위해 슬레이브는 읽기전용으로 설정할 때가 많다.
슬레이브의 I/O 스레드는 마스터 서버에 접속해 변경내역을 요청하고,
받은 데이터를 릴레이 로그에 기록한다.
슬레이브 서버의 SQL 스레드가 릴레이 로그에 기록된 변경 내역을 재실행 함으로써
슬레이브의 데이터를 동기화 시킨다.
당연하게도 I/O 스레드와 SQL 스레드는 마스터에서는 기동되지 않으며,
복제가 설정된 슬레이브 서버에서 자동적으로 기동한다.