실사용 db 에서 mysql replication
실제 구동중인 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;