Xtrabackup 을 활용한 Replication 설정
Xtrabackup 을 이용한 Slave 추가 하기.
Master 에 Slave 를 추가해야 하는데, Online 상황에서 추가하기는 쉽지가 않다. 대부분 mysldump 를 이용해서 추가 하는 방법이나, mysql data 디렉토리를 압축해서 해제하는 방법을 쓰거나 둘중 하나이다.
하지만 이렇게하면 Online 상태를 유지할 수 없다. Online 상태를 유지면서 Master 의 데이터를 옮기는 방법으로는 Xtrabackup 을 이용하는게 제일 좋다.
먼저, Xtrabackup 툴을 Master 와 Slave 서버에 모두 설치해 준다. 그리고 Master 서버에 다음과 같이 백업을 위한 계정을 생성한다.
1 2 3 |
CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret'; GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost'; FLUSH PRIVILEGES; |
그리고 두가지를 생각해봐야 한다. 먼저 새롭게 준비된 Slave 에서 Master 에서 데이터를 땡겨올건지 아니면 Master 에서 Slave 로 쏴줄 것인지이다.
새로운 Slave -> Master 로 접속해서 데이터를 끌어오는 방법은 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 |
ssh -o StrictHostKeyChecking=no mysql@192.168.96.7 \ "innobackupex \ --host="localhost" \ --user="bkpuser" \ --password="s3cret" \ --no-lock \ --stream=xbstream \ /opt/backup | pv --rate-limit 50000000" 2> innobackupex.log \ | xbstream -x 2> xbstream.log # 출처: http://gywn.net/2017/01/automated-recovery-scenarios-for-lazy-mysql-dba/ |
Master -> Slave 로 데이터를 쏴줄때는 다음과 같이 한다.
1 2 3 4 5 6 7 8 |
innobackupex \ --host="localhost" \ --user="bkpuser" \ --password="s3cret" \ --no-lock \ --stream=xbstream /tmp | pv --rate-limit 50000000 \ | ssh -o StrictHostKeyChecking=no mysql@192.168.96.6 \ "cat - | xbstream -x -C /opt/backup" |
쏴줄때에 위와같이 하면 백업 진행중에 ssh 접속 패스워드 입력하라는 프롬프트가 나오고 지나가버립니다. 그래도 패스워드를 입력하면 됩니다.
백업 완료되면 디렉토리에 xtrabackup_binlog_info 파일 생성되고 다음과 같은 내용이 포함된다.
1 |
localhost-01-bin.000003 543 |
이 내용을 기반으로 Replication 을 할때에 활용한다.
데이터를 다 끌어오는 동안에 변경된 데이터를 적용해야하는데, 다음과 같이 한다.
1 |
innobackupex --apply-log /opt/backup |
그리고 다음과 같이 복원을 시행한다.
1 |
innobackupex --copy-back /opt/backup |
그리고 다음과 같이 리플리케이션을 걸어준다.
1 2 3 4 5 6 7 8 |
CHANGE MASTER TO MASTER_HOST='MASTER_HOST', MASTER_USER='repl', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='MASTER_LOG_FILE', MASTER_LOG_POS=MASTER_LOG_POS; START slave; |