관리자 글쓰기
실사용 db 에서 mysql replication
2017. 1. 25. 09:22 - 미나리다

실제 구동중인 DB서버에서 리플리케이션을 해야될경우

master db를 다운하지 않고 리플리케이션을 하는법


1.master db에서 데이터를 덤프할때 pos번호를 남게한다


2. 해당 덤프파일에서 마지막 pos지점을 확인한후 master db의 binlog에서 위 덤프파일의 마지막 pos지점

다음의 pos번호를 slave db에서 연동할때 넣어주어야한다.


이렇게 하면 데이터가 계속 쌓이는 상황에서도 리플리케이션이 된다.


리플리케이션 하기전 my.cnf설정은 해당문서 와 같이 하면된다


MASTER DB

#mysqldump -u root -p --master-data=2 --databases --no-autocommit=1 --single-transaction=1 --extended-insert=1 --all-databases > master_db.sql   

  :: 옵션 설명

--master-data : 

이 옵션이 명시되면, dump 파일의 헤더 부분에 CHANGE MASTER TO 구문을 포함시키며,

이 구문에는 덤프 시작 시점의 Binary log 파일명과 위치 정보 및 호스트 정보를 포함하고 있다.

이 값을 1로 설정하면 CHANGE MASTER TO 구문이 실제 실행 가능한 형태로 포함되며,

2로 설정되면 SQL 코멘트 형태로 참조만 할 수 있도록 포함된다.

가끔 Binary log가 활성화되지 않은 서버에서 실행 시 에러를 유발하기도 하므로

반드시 먼저 테스트를 해볼 것을 권장한다.


덤프파일의 마지막 pos 지점확인

# cat master_db.sql | grep 'CHANGE MASTER'

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000021', MASTER_LOG_POS=3431497;     <pos지점번호 및 bin파일 확인

mysql-bin.000021로그를 sql파일로 추출


#mysqlbinlog /mysql/data/mysql-bin.000021 > ./mysql21.sql


sql파일을 연 뒤 3431497 다음 번호를 확인한다 (번호는 랜덤입니다)


#at  3431497
end_log_pos 3431850
# at 3431850    <<  3431497 바로 다음번호를 slave설정할때 넣어주어야합니다!!!!


SLAVE DB
# mysql -u root -p < master_db.sql       
sql > slave stop;
sql > change master to master_host='192.168.45.8', master_user='root', master_password='password', MASTER_LOG_FILE='mysql-bin.000021', MASTER_LOG_POS=3431850;
sql > slave start;