참고 자료
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
옵션은 백업 위치, --datadir
은 mariadb
의 데이터디렉토리를 의미합니다.
복제(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
: 백업시master
의host
정보, 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_tables
가0
이 될 때까지 기다립니다. 열려있는 임시 테이블이 없는 경우 백업이 실행되고, 그렇지 않으면 열여 있는 테이블이 없을 때까지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
으로 보내고 pigz
가 4
개의 쓰레드를 사용하여 압축하는 예제 입니다.
$ 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
도구를 사용하는 것도 나쁘지 않은 선택이라고 보여지네요…