Mariabackup

개발者·2021년 12월 20일
0

MariaDB

목록 보기
1/2

Full Backup vs Incremental Backup

Full Backup - 선택된 디렉토리의 Data를 모두 백업하는 방식

Incremental Backup - 선택된 디렉토리의 Full 백업 이후 추가된 Data만 백업하는 방식

Data의 양이 많아지면 Full Backup을 통한 백업/복구 작업에 상당한 시간이 걸리기 때문에 Incremental Backup을 수행하여 백업/복구의 시간을 단축할 수 있다.


논리적 백업 VS 물리적 백업

MariaDB 데이터를 백업하는 방법은 크게 논리적 백업과 물리적 백업이 있다.

논리적 백업

  • 논리 백업으로 복원 작업이 수월하다.
  • 물리적 백업에 비해 복원 시 데이터 손상을 막아주며 문제 발생 시 원인 파악 및 해결이 쉽다.
  • 백업/복원 시 시스템 리소스를 더 많이 사용한다.
  • 부동 소수점 데이터의 백업/복원 시 데이터 정확성을 잃을 수 있다.

물리적 백업

  • 빠르다.

  • 백업 기준 약 2배 / 복원 기준 약 6배 차이 발생


What is the Mariabackup?

Percona사의 XtraBackup으로 부터 Fork 해서 만든 MariaDB 물리적 백업 툴 이다.

MariaDB의 전체 혹은 증분 백업을 할 때 사용한다. 전체 백업은 말 그대로 빈 디렉토리에 complete 한 복사본을 만드는 작업이고, 증분 백업은 이전 백업에 새로운 데이터를 추가하면서 백업하는 작업 방식이다.

InnoDB 페이지는 연속된 숫자(혹은 LSN(Log Sequence Number))의 로그를 포함한다. 테이블에 어떤 작업을 수행해도 스토리지 엔진은 해당 숫자를 증가시킨다. 증분백업을 수행할 때 Mariabackup은 가장 최근 LSN을 확인한다.


Installing Mariabackup

  • ubuntu
sudo apt-get install mariadb-backup

How to use

  1. 증분 백업을 하기 위해, 먼저 전체 백업을 진행할 필요가 있다.
    우선 백업을 수행하기 위한 --backup옵션과 --target-dir옵션으로 백업파일이 위치할 디렉토리를 지정해 주어야 한다. 해당 디렉토리는 비어있거나 존재하지 않아야 한다.
mariabackup --backup \ 
		--target-dir = /bar/mariadb/backup \ 
		--user=mariabackup --password=mypassword

해당 작업은 전체 database를 target-dir에 백업한다.

  1. 증분 백업을 하기 위해, --backup , --tartget-dir, --incremental-basedir 옵션이 필요하다. 타겟 디렉토리는 빈 디렉토리 이어야 한다.
    (만약 backup 디렉토리랑 같은 디렉토리를 target으로 지정하면 error가 발생한다.)
mariabackup --backup \
   --target-dir=/var/mariadb/inc1/ \
   --incremental-basedir=/var/mariadb/backup/ \
   --user=mariabackup --password=mypassword

추가 증분 백업 작업을 진행하기 위해서는 아래와 같이 --target-dir, --incremental-basedir 을 수정해서 수행하면 된다.

mariabackup --backup \
   --target-dir=/var/mariadb/inc2/ \
   --incremental-basedir=/var/mariadb/inc1/ \
   --user=mariabackup --password=mypassword
  1. 복구를 위해서는 Full Backup 부터 --prepare 옵션을 사용하여 복구 준비를 진행하면 된다.
mariabackup --prepare \
   --target-dir=/var/mariadb/backup
mariabackup --prepare \
   --target-dir=/var/mariadb/backup \
   --incremental-dir=/var/mariadb/inc1
  1. 복구 준비 진행 후, --copy-back 혹은 —-move-back 옵션을 통해 백업을 데이터 디렉토리로 복원할 수 있다. copy-back 옵션은 backup 파일을 남겨두고, move-back 옵션은 backup파일을 삭제한다. (--datedir 옵션으로 정의된 데이터 디렉토리에 복구된다.)
mariabackup --copy-back \
   --target-dir=/var/mariadb/backup/

5 . 복구 이후, owner는 복구 명령을 수행한 user와 group으로 설정되기 때문에 확인 할 필요가 있다.

chown -R mysql:mysql /var/lib/mysql
  1. 복구가 끝났으면 mariadb 서버 프로세스를 시작한다.

유의사항


복원 조건

  1. 복원을 위해 MariaDB의 서비스를 잠시 중단
  2. DB data 디렉토리(일반적으로 '/var/lib/mysql/')가 비워져 있어야 한다.
  3. 앞서 준비된 전체 백업 데이터로 복원을 진행한다.

컨테이너 형태의 MariaDB 복원

  • 복원 조건 1. 을 충족시키려면 컨테이너를 정지해야 한다. ($ docker stop)
  • 정지한 컨테이너에서는 Mariabackup 명령어를 내릴 수 없으므로,원본 컨테이너의 DB 데이터 및 백업 데이터 디렉토리에 접근할 수 있는 또 하나의 DB 컨테이너(이하 Mirror )를 띄운다.
  • Mirror에서 Mariabackup 명령어로 복원을 진행한다.
  • 원본 컨테이너를 재시작하면, Mirror와 볼륨을 공유하므로 복원한 데이터가 원본 컨테이너에도 그대로 적용된다.

테스트

  • mariadb 컨테이너 중단 없이 datadir 내부 파일들 지우고store한 후, mariadb 재시작하면 정상 동적함
  • 그런데 중간에 테이블이 업데이트 되거나 하는 상황이 생기면 mariabackup이 중단된다고 하니 DB에 쿼리가 들어오지 못하게 막아둘 필요가 있음.

실제 Mariabackup(XtraBackup) 사용 사례

장애와 관련된 XtraBackup 적용기 | 우아한형제들 기술블로그


결론

  • Mariabackup을 이용한 물리적 백업을 하면 비교적 빠른 시간에 백업/복구가 가능하다.
  • Delete, Drop, Truncate 와 같은 작업은 다른 개발자에게 부탁하자.

Reference

profile
solrasido

0개의 댓글