미니옵빠의 code stubs

MySQL 복제 본문

Database/Mysql

MySQL 복제

미니옵빠 2010. 2. 9. 20:32

MySQL 복제에 관한 방법입니다.
우선 아래 링크된 article을 읽어보세요.

http://betle.tistory.com/190
http://taejung.kr/entry/MySQL-Replication-1?category=12

간략히 설명하자면

1. my.ini (my.cnf) 에 server-id 와 binary log 기록 부분을 설정합니다.

2. GRANT REPLICATION SLAVE ON *.* TO 'userid'@'%' IDENTIFIED BY 'password';  명령으로 replication 에 사용할 계정을 만듭니다.

3. Master 의 데이터를 Slave로 복사하여 데이터를 동기화 합니다.

4. Slave 에서 아래와 같은 명령으로 Master 서버의 정보를 설정합니다.
CHANGE MASTER TO
 MASTER_HOST='host명',
 MASTER_USER='userid',
 MASTER_PASSWORD='password',
 MASTER_LOG_POS=replication을 시작할 바이너리 로그 파일의 postion. 숫자입니다.,
 MASTER_LOG_FILE='replication을 시작할 바이너리 로그 파일명' ;

5, slave start  명령으로 slave 시작


입니다.

위의 4번에서 보이는 LOG FILE과 postion은, MySQL의 바이너리 로그를 이해하신다면 무슨 뜻인지 알 수 있을 거구요
해당 항목은 생략 가능합니다. (그러면 Master의 바이너리 로그 제일 처음부터 기록된 transction이 전송되기 시작합니다)

그리고 3번 항목의 데이터 복사는 DB DUMP를 사용하거나, 물리적인 데이터 이전을 이용하면 됩니다.
참고로 InnoDB도 그냥 파일 카피를 해도 되는군요. (단, ib_logfile 도 함께 복사)

이 데이터 복사 중에는 가능한 Master DB에 데이터 입력을 막는 것이 좋습니다. 아니면 3번 항목에서 데이터 복사 중 추가로 발생한 데이터를 다시 sync 맞추느라 고생할 수도 있습니다.


복제 설정 완료 후 Master에서 Slave로 실제 replication이 시작되는데, 이 때 여러가지 이유로 replication이 실패할 수 있습ㄴ디ㅏ.
이 때에는 아래의 article를 이용해서 복구하시면 됩니다.

http://www.howtoforge.com/how-to-repair-mysql-replication
http://cafe.rootcenter.com/130078704068 

역시나 간략히 설명하자면

1. 해당 오류 데이터를 수정 후 slave start
2. SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;  명령으로 해당 replication query를 skip 후 slave start. 물론 skip count는 필요에 따라 늘이시면 됩니다.

입니다. 개인적으로는 2번 방법을 추천합니다.