mariadb-backup을 이용한 백업 및 복구

참고 자료


https://mariadb.com/kb/en/mariabackup-options/

https://mariadb.com/kb/en/using-encryption-and-compression-tools-with-mariabackup/

일반적인 백업 및 복원


백업

일반적인 full backup을 의미하며 백업된 데이터를 /data/backup/ 에 저장하는 예제입니다.

$ mariadb-backup \
--backup \
--target-dir=/data/backup

--backup 옵션은 백업을 의미 하고 --target-dir 옵션은 백업된 데이터가 저장될 위치를 의미 합니다.

복원

/data/backup 에 저장된 백업 데이터를 이용하여 mariadb의 데이터디렉토리인 /data/mariadb 에 복원하는 예제입니다. mariadb 데몬은 중지 상태, /data/mariadb 는 비어있는 상태로 진행합니다.

$ mariadb-backup \
--copy-back \
--target-dir=/data/backup \
--datadir=/data/mariadb

--copy-back 옵션은 데이터를 복원한다는 의미이고, --target-dir 옵션은 백업 위치, --datadirmariadb의 데이터디렉토리를 의미합니다.

복제(replication)환경에서의 백업 및 복구


일반적으로 복제 환경에서 백업시 여러가지 Side effect를 고려하여 master 서버에서 백업을 하기 보다 특정 slave에서 백업을 합니다.

slave 에서 백업을 할 때 master 서버의 정보를 함께 백업 해야 slave 추가 생성시 백업된 데이터를 사용하여 복원할 수 있어 mysqldump를 사용하여 백업할 때는 --master-data=2 옵션을 추가하여 master 정보까지 함께 백업을 하곤 합니다.

mariadb-backup 에서도 마찬가지 백업시 master의 정보를 함께 백업 할 수 있습니다.

백업

$ mariadb-backup \
--backup \
--target-dir=/data/backup \
--slave-info \
--safe-slave-backup
--user=root \
--password=PASSWORD

옵션 설명

  • --slave-info : 백업시 masterhost 정보, binary로그파일 이름, slave SQL Thread 위치를 CHANGE MASTER 구문으로 xtrabackup_slave_info 파일에 기록합니다.
  • --safe-slave-backup : 백업을 위한 slave SQL Thread를 중지합니다. 복제를 사용하는 서버에서 mariadb-backup을 실행할 때 때때로 백업을 차단하는 lock이 발생할 수 있으나, 이 옵션을 사용하면 slave SQL Thread를 중지하고 SHOW STATUS문의 Slave_open_temp_tables0이 될 때까지 기다립니다. 열려있는 임시 테이블이 없는 경우 백업이 실행되고, 그렇지 않으면 열여 있는 테이블이 없을 때까지 SQL Thread가 시작 및 중지 됩니다.

복원

위에서 설명한 복원방법으로 데이터를 복원한 후 xtrabackup_slave_info 파일에 기록된 CHANGE MASTER 구분을 실행하여 복제를 실시 합니다.

백업시 압축


mariadb-backup은 백업시 별도의 옵션을 주지 않으면 실제 데이터 디렉토리의 파일을 복사합니다. 만약 실제 데이터 사이즈가 클 경우 그대로 백업을 하기 때문에 디스크 공간이 많이 필요 할 수 있습니다. 아래 예제는 백업시 gzip으로 압축하는 방법을 설명합니다.

백업

$ mariadb-backup \
--backup \
--slave-info \
--safe-slave-backup \
--stream=xbstream | gzip > /data/backup/full_backup.gz

옵션 설명

--stream=xbstream : 이 옵션은 백업된 결과를 stdout 으로 streaming 할 수 있어 널리 사용되는 암호화 및 압축 도구를 쉽게 통합할 수 있습니다.

복원

gzip으로 압축이 되어 있기 때문에 아래 명령을 실행하여 압축을 해제한 후 데이터를 복원합니다.

$ gunzip -c full_backup.gz | mbstream -x

백업시 압축 성능 향상을 위한 방법


pigz 압축툴을 이용하여 백업과 동시에 데이터를 병렬로 압축하는 방법입니다.

참고 문서

백업

--stream 옵션을 이용하여 백업 데이터를 stdout으로 보내고 pigz4개의 쓰레드를 사용하여 압축하는 예제 입니다.

$ mariadb-backup \
--backup \
--slave-info \
--safe-slave-backup \
--stream=xbstream 2>backup.log | pigz -p 4 > /data/backup/backup.gz

복원

pigz로 압축된 백업을 복구하기 위해서 아래 명령어로 압축을 해제 합니다. 나머지 복구 방법은 위에서 기술한 내용을 참고 합니다.

$ pigz -dc -p 4 backup.gz | mbstream -x

옵션 설명

  • -d : 압축된 입력을 압축해제
  • -c : 처리된 모든 출력을 stdout으로
  • -p : n개의 프로세스를 허용
  • mbstream -x : 표준 입력의 xbstream 포멧 데이터를 파일로 추출

총평

실제 약 80GB의 mariadb 데이터를 가지고 백업 및 복원을 테스트 해 보았을때 mysqldump 사용시와 비교하여 백업 속도는 크게 차이가 없었습니다. 다만 pigz를 사용하여 여러개의 프로세스로 백업을 진행 했을때는 큰 속도차이를 보였습니다.

복원 시 sql 파일로 복구하는 것 보다 월등한 시간차이를 보였습니다.

full backup만을 가정, 데이터크기가 작을 경우 mysqldump를 사용해도 백업 및 복원 성능상 큰 문제가 되지 않는다. 하지만 데이터 크기가 점점 커짐에 따라 백업 및 복구 성능을 무시할 수 없기에 mariadb-backup 도구를 사용하는 것도 나쁘지 않은 선택이라고 보여지네요…

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다