Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

Xtrabackup 본문

MySQL/기타 지원 Utility

Xtrabackup

`O` 2021. 5. 13. 00:30
728x90
반응형

해당 페이지에서는 MySQL / MariaDB 에서 backup tool 로 많이 쓰이는 xtrabackup 에 대해서 다룬다.

 

(참조 사이트: woowabros.github.io/experience/2018/05/28/billingjul.html)

xtrabackup 개요

 

xtrabackup 은 MySQL / MariaDB 관련 서비스를 제공하는 percona 사에서 만든 MySQL / MariaDB 용 백업 툴이다. 

 

기존 MySQL / MariaDB 에서는 자체 백업 기능인 mysqldump 가 있으나, 해당 기능은 incremental backup 이 없고,

생성되는 백업파일이 구성된 DB 에 기입하는 형식으로 구현되어 용량이 클 수록 그에 따른 기입시간도 기하 급수적으로 늘어나기에 

이에 따른 긴 복구 시간의 단점이 있다. 이에 대한 개선 솔루션으로 나온것이 xtrabackup 이다. 

 

xtrabackup 특징

 

xtrabackup 의 특징은 위와 같이 incremental backup 이 가능하고 

백업 중 유입되는 DML 내용들에 대해서도 지속 보관을 하여 실제 운영 DB 와의 데이터 일관성을 보장하는 것에 있다. 

incremental 의 원리는 아래 화면과 같이 DB 내에 있는 Redo Log 의 LSN (Log Sequence Number) 를 지속적으로 추적한 후,

그에 따른 추척한 LSN 증가량을 기준으로 백업을 시작한 시점과 비교하여 DB 에서 변경된 내역만 저장하는 것이다.

 

(아래 실행 예시 참조) 

 

xtrabackup 명령어 및 기타 옵션

(참조 : www.percona.com/doc/percona-xtrabackup/2.3/xtrabackup_bin/xbk_option_reference.html)

 

xtrabackup 은 다양한 명령어가 있고, 회사마다 조건에 따라 자주쓰이는 명령어는 다르다.

그렇기에 여기서는 필자가 소속된 회사에서 자주 쓰는 명령어들을 기재한다.

 

백업시

 

-- datadir

 

현재 운영중인 DB 에서 백업을 수행하기 위해 참조할 DB 데이터 경로다.

 

-- backup

 

xtrabackup 내 여러 기능 중 백업을 수행하기 위해 기입 하는 선택 기능 옵션이다.

 

-- no-lock

 

mysqldump 와 같이, 해당 옵션을 주지 않으면 데이터 정합성을 위해 외부 데이터 접근을 막는 lock 을 걸게된다. 

당연히 운영서버에서 lock 을 걸면 이에 대한 DB 접근 불가로 서비스 이상 및 장애가 발생 하기에 이를 방지 하기 위해서 필수로 넣어야 할 옵션이다.

 

-- user, --password 및 기타 정보

 

백업을 수행하기 위해서 사용할 DB 유저 정보를 기입한다. 

 

-- target-dir 

 

해당 백업을 수행 시 만들어지는 백업본을 저장할 경로를 지정하는 옵션이다. 보통 백업 파일 보관 디렉토리에 설정 후 보관한다. 

 

위의 옵션을 조합해서 보통 수행하는 백업 명령어는 아래와 같다.

 

xtrabackup --datadir=(데이터 경로) --backup --no-lock -u(유저) -p(PW) --socket=(DB 사용 소켓, 단 이 항목은 선택 항목임), --target-dir=(받을 백업본 경로) 

 

사용 예시 화면

 

정상 수행이 되면 아래와 같이 현재 DB 에서 보관중인 최신 LSN 번호를 추적하고, 이를 base 로 백업 및 변경내역을 보관하기 시작한다.

 

완료되면 본 DB 데이터 영역에 기록된 LSN 에 근거한 백업본 및 아직 디스크에 기록되지 않고 Redo Log 에서 보관하는 최신 LSN 까지 반영 된 xtrabackup_logfile 및 기타 정보성 파일들을 만든다.

 

 

 

복원시 (Fullackup 기준)

 

-- innobackupex

 

xtrabackup 에서는 restore 수행 시, xtrabackup 대신 해당 명령어로 복원을 수행한다.

 

-- defaults-file 

 

my.cnf 파일위치를 말하며 해당 파일에 있는 설정 경로들을 참조하여 변경본 적용 및 백업본을 copy 한다.

 

--apply-log 

 

DB 백업시에도 DB 외부에서 지속적인 DML 이 유입되게 된다. 이에 따라 백업 중에도 운영 DB 데이터와의 정합성을 맞추기 위해서

xtrabackup 은 따로 백업중에도 변경내용을 지속적으로 파일에 보관하게 되며 (xtrabackup_logfile), 백업이 완료 된 후 해당

파일까지 적용을 하여 변경내역까지 반영 될 수 있도록 해주는 옵션이다.

 

-- copy-back /백업본 파일 경로/

 

xtrabackup 은 위의 백업을 받은 백업본을 통하여 DB 데이터 경로에 복원을 실행 한다. 이때 사용하는 백업본 경로 위치 옵션이다.

그리고 이를 위해서 기존에 사용하던 데이터 경로 디렉토리는 rename 이나 삭제등으로 비워둬야 한다.

 

복원을 수행 할 시에는 먼저 백업본 + 운영 DB 에서 사용하는 데이터 영역을 확인한다.,

필자는 백업본을 datadir_backup, 운영 DB 데이터를 datadir 로 구성했다.

 

 

 

이제 복원을 위해서는 위에서 설명한 것과 같이 DB 에서 사용하는 data 디렉토리 영역을 비워야한다.

이를 위해서 DB를 기동 중지 시킨 후, 사용하던 datadir 를 datadir_original 로 변경한다.

 

 

복원 전, datadir_backup 에서 백업을 받는 동안 적용이 되지 않은 redo log 내 변경내역까지 적용을 해줘서 데이터 정합성을 맞춰야한다. 명령어는 아래와 같다.

 

innobackupex --defaults-file=(사용중인 my.cnf 위치) --apply-log (받아둔 백업본 파일)

사용 예시 화면

 

정상 수행이 되면 아래와 같이 redo log 에 기록된 변경 내역을 추적하여 본 데이터에 적용을 해준다. 

 

(중간 생략)

 

 

그 후, copy-back 옵션으로 백업본 -> 데이터경로 복원을 수행 및 정상 적으로 수행이 되면 아래와 같은 log 들을 보여준다. 명령어는 아래와 같다.

 

innobackupex --defaults-file=(사용중인 my.cnf 위치) --copy-back (백업본 파일)

 

정상 수행 시, 아래와 같이 수행이 된다.

 

(중간 생략)

 

 

그후 복원이 정상적으로 되면 아래와 같이 datadir 가 생긴다.

 

 

이제 다시 이를 기반으로 DB를 다시 재기동 해서 프로세스를 확인 하면 DB가 정상 기동되었음을 확인 할 수 있다.

 

 

 

반응형

'MySQL > 기타 지원 Utility' 카테고리의 다른 글

Percona Toolkit  (0) 2021.03.03
Comments