마스터에서 DML과 DDL 가운데 데이터의 구조나 내용을 변경하는 모든 쿼리 문장을 바이너리 로그에 기록한다. 슬레이브에서 변경 내역을 요청하면 마스터는 바이너리 로그를 읽어 슬레이브로 넘기는데 이때 마스터의 'Binlog dump' 스레드가 이 일을 수행한다. N개의 슬레이브가 있다면 마스터에는 N개의 Binlog dump 스레드가 있다.
슬레이브의 I/O 스레드는 마스터로부터 넘겨받은 변경 내역을 그대로 릴레이 로그에 기록한다. 그럼 슬레이브의 또다른 스레드인 SQL 스레드가 릴레이 로그에 기록된 변경 내역을 Replay함으로써 슬레이브를 마스터와 동기화한다.
슬레이브에서 보통 Read만 해야하는데 실수로 Insert 등을 하게 되면 작업이 꼬이게 된다. 이를 처음부터 방지하기 위해 슬레이브의 my.cnf에는 read_only 속성을 두는 게 좋다.
바이너리 로그를 관리하는 것에는 상당한 부하가 걸린다. 따라서 Replication을 하는 경우가 아니라면 관련 설정을 my.cnf에서 없애는 게 좋다.
Replication에는 바이너리 로그에 마스터에서 실행된 SQL 문장이 단순하게 기록되는 Statement based replicaton과, 마스터에서 변경된 데이터 레코드를 기록하는 Row based replication 이 2가지 종류가 있다.
Statement based replication은 Row based replication에 비해 슬레이브에 전송해야할 데이터의 양이 적다는 장점은 있지만 now() 함수 등과 같이 비결정적인 값을 리턴하는 것들이 SQL 문에서 쓰였을 경우 문제가 발생할 수 있다는 단점이 있다.