replication - Mysql

- 호환성을 위해 replication 사용하는 mysql 동일하게 맞추기 

- 버전이 다른 경우 반드시 slave 서버가 상위버전이어야 한다. 

- replication 가동시에 master 서버 , slave 서버 손으로 가동 

- mysql root 계정으로 사용하는 것은 보안상 좋지 않기 때문에 복제계정 생성이 좋다. 


일반적인 레플리케이션 구성 : 레플리케이션 되는 대상을 전체 데이터베이스로 잡아 슬레이브 DB 구성 

읽기 전용으로 구성하는 것이 좋디 . 


3개의 스레드 작동 

DB => 바이너리 로그 덤프 스레드 


슬레이브 DB 가 마스터 DB 로부터 정상적으로 데이터를 전송받기 위해서는 레플리케이션 환경을 구성하기 위해 마스터 db my.cnf 파일에 시스템 변수를 반드시 설정해야 한다. 만약 설정돼 있지 않으면 레플리케이션이 제대로 동작하지 않는다.

: log-bin 과 server-id 는 꼭 설정해야 한다. 


-> 설정 후에 Mysql 다시 시작하기  


- 마스터 DB 와 슬레이브 DB 간의 데이터 일관성을 유지하기 위해 설정하는 시스템 변수 


바이너리 로그 파일 존재한다. 

binlog_format  

-> statement , row(가장안전 , 용량 크다) , mixed 의 세 가지 포멧으로 설정 가능 

상용기 mixed 로 설정되어 있다. 


- sync_binlog 


- innodb_flush_log_at_trx_commit : innoDB 엔진의 트랜잭션을 이용해 레플리케이션을 구성할 때 데이터 일관성을 유지하기 위해서는 innodb_flush_log_at_trx_commit=1 로 설정한다.




---- 슬레이브 db 


마스터 db 의 설정을 완료하고 나면 새로 구성할 슬레이브 DB 의 설정 진행한다. 


- server-id : 마스터 DB에 하나 이상의 슬레이브 DB를 사용할 경우 다른 슬레이브 DB와도 서로 다른 server-id 값을 설정해야 한다. 


- read only 로도 사용 가능 




현재 우리 

마스터 DB로 사용할 DB에 이미 데이터가 저장돼 있는 상태에서 레플리케이션할 새로운 슬레이브 DB 구성하기


** 반드시 : 마스터 DB 의 데이터백업이 선행돼야 한다.

특정 시점까지(point in time) 의 마스터 DB 데이터를 슬레이브 DB로 레플리케이션 하려면 마스터 DB의 전체 데이터 백업이 필요. 

-> 이 전체 백업 파일을 슬레이브 DB에서 복구방식으로 데이터를 복원한다. 

복원이 완료되면 마스터 db 에서 전체 데이터 백업이 완료된 시점의 바이너리 로그 파일과 포지션 정보를 이용해 마스터 DB 와 슬레이브 DB 를 연결한다. 



** 마스터 DB 에 MyISAM 스토리지 엔진 테이블 존재 

MyISAM 스토리지 엔진은 트랜잭션 지원않는다. 

마스터 DB 에 MyISAM 테이블 데이터가 변경되지 않도록 락을 걸거나 DB 에 접속 돼 있는 세션 연결을 모두 끊어서 데이터가 변경되는 것을 막은 뒤 백업 시작하기 운영중인 마스터 DB 에 실시간으로 슬레이브 DB를 추가할 수 없다. 


데이터 백업


 시점 백업을 수행하는 방법에는 두가지가 있다. 

1.mysqldump 유틸리티를 이용해 백업 실행 시 --single-transaction 옵션 추가해서 사용 

2. 온라인 백업 도구인 Xtrabackup 을 이용한다. 


백업 파일 복원 



레플리케이션 연결 


슬레이브 DB 에 백업 파일을 복원한 후 , 확인된 마스터 DB 의 바이너리 로그파일과 포지션 정보를 이용해 레플리케이션 정보를 등록한다. 



- 슬레이브 상태 확인하기 : 

show slave status;  -> 우리는 현재 설정이 안되어 있는것으로 보인다. 


show processlist 검색 : 

-> replication 이 실행되고있다면, 

: Master has sent all binlog to slave; waiting for binlog to be updated





















댓글