DESCRIBE

MariaDB - MariaBackup 증분 백업 관리하기(XtraBackup) full AND incremental 본문

DATABASE/MySQL(MariaDB)

MariaDB - MariaBackup 증분 백업 관리하기(XtraBackup) full AND incremental

soly 2021. 9. 17. 16:37

 sqldump 백업 데이터의 용량과 소요 시간문제로 전체적인 DB 백업 시스템을 새로 정립하게 되었다.

mysqldump VS mariabackup

백업 방식의 차이로 mysqldump는 전체 테이블과 행 하나하나를 INSERT구문으로 변환한 논리적 백업이다.

이렇게 생성된 INSERT구문을 실행함으로써 복원이 진행된다.

 

반면, mariabackup은 DB데이터를 통째로 복사하는 물리적 백업이다.

 

데이터가 증가할수록 백업&증분에 소요되는 시간은 mariabackup이 빠르므로 mariabackup으로 간다. (간다 숑간다)

 

전체 백업? 증분 백업?

- 전체 백업 (Full BackUp)

 선택된 디렉터리의 데이터를 모두 백업하는 방식

 매번 전체 데이터를 백업하기 때문에 데이터양이 많고, 소요시간이 크지만, 복원은 증분 백업에 비해 간단하다.

 

- 증분 백업 (Incremental Backup)

 디렉토리의 전체 백업 이후, 변경되거나 추가된 데이터만 선택적으로 백업

 전체 백업보다 데이터양이 적고 소요 시간이 짧다는 장점이 있으나, 전체 백업에 종속적이다.

 

매일 전체 데이터를 백업하지 않기에 소요시간도 짧으며, 차지하는 용량도 귀여운 증분 백업

복원의 복잡성은 매뉴얼화로 해결 가능하다.

 

XtraBackup?

 - mariaDB 10.1 이후부터는 XtraBackup 대신 MariaBakcup을 추천하며, 10.3부터는 XtraBackup을 지원하지 않는다.

(버전 호환성 참고: https://runebook.dev/ko/docs/mariadb/backup-restore-and-import-xtrabackup/index/#compatibility-with-mariadb)

 - Percona XtraBackup이 MariaDB의 redo log file을 인식하지 못하는 문제가 있다.

 - xtrabackup에서 지원하는 libgcrypt기반 암호화는 mariabakcup 지원하지 않는다.

 - xtrabackup은 InnoDB 리두 로그파일을 xtrabackup_logfile파일로 복사하는 반면, Mariabakcup은 ib_logfile 파일을 사용한다.

 - --compact 및 --rebuild_indexes 옵션은 지원되지 않습니다. 

 - mariabackup은 잠금 없는 binlong를 지원하지 않습니다.


schedule

 한 주를 기준으로 트래픽이 가장 적은 요일, 시간대에 전체 백업/ 이외의 요일엔 증분 데이터를 백업한다.

(전체 백업을 처음 한 번이 아닌 일주일에 한 번으로 주기적인 이유는 추후 복원 작업 시 최초 전체 백업 데이터 이후로 생성된 모든 증분 백업을 복원할 경우 효율적이지않으므로, 일주일에 한 번 전체 백업을 함으로써 어느 시점에 증분백업 데이터를 복원할 때에도 최대 7개가 넘는 증분 백업본을 복원할 일이 없다. 또한, 전체 백업 데이터를 한 개만 두고 매일매일 증분 데이터를 적용할 수도 있는데, 그렇게 했을 경우 특정 날짜의 데이터를 구하기 어려워진다.)

 

전체 백업

1) full backup 

mariabackup --backup \
--no-lock \	#TABLE LOCK없애기
--user=user \ 
--password='password' \
--target-dir=/backup/fullbackup #백업된 데이터를 담을 경로

서비스 중인 상용 테이블이 백업으로 인해 잠기는 것을 막기 위한 옵션 no-lock

2) ib_logfile0 트랜잭션 로그 파일(이노 리두 로그파일) 합치기 prepare

(XtraBackup의 apply-log 단계)

전체 백업이 수행되는 동안 데이터 테이블에 INSERT, UPDATE, DELETE 쿼리로 데이터의 갱신이 이루어질 경우 트랜잭션 로그 파일에 쌓인다. 로그파일을 백업분에 반영하여 데이터의 일관성을 유지해준다.

 

MariaBackup에 의해 만들어진 파일 목록 설명

https://runebook.dev/ko/docs/mariadb/files-created-by-mariabackup/index

 

MariaDB - Mariabackup에 의해 만들어진 파일 - Mariabackup은 다음 파일을 만듭니다. backup-my.cnf 백업 중에

Mariabackup은 다음 파일을 만듭니다. 백업 중에 Mariabackup과 관련된 모든 서버 옵션은 backup-my.cnf 옵션 파일 에 기록되므로 나중에 --prepare 단계 에서 다시 읽을 수 있습니다 . 에서 MariaDB 10.2.10 나중에

runebook.dev

--target-dir에 설정해둔 디렉터리를 들어가 보면 ib_logfile0을 확인할 수 있습니다.

mariabackup --prepare \
--user=user \
--password='password' \
--target-dir=/backup/inc1

prepare 수행 후 이노 리두 로그파일이 비워진 걸 확인할 수 있다.

 

증분 백업

전체 백업 데이터의 LSN(로그 시퀀스 넘버)을 참조하여 그 이후의 변경 데이터를 추려 백업을 실행합니다.

(LSN참조를 위해 증분 백업은 전체 백업이 먼저 수행되어야 한다.)

 

전체 백업 시 생성된 'xtrabackup_checkpoints' 파일에서 LSN을 참조합니다.

mariabackup --backup \
--target-dir=/var/backup/inc/ \ #증분백업된 데이터를 저장할 경로
--incremental-basedir=/var/backup/full/ \ #LSN을 참조할 경로
--user=root \
--password='password'

다음 회차의 증분 백업을 수행할 때에 --incremental-basedir의 경로는 마지막 LSN정보가 담긴 "/var/backup/inc/"가 된다.

 

백업 데이터에 증분 백업 데이터 반영

mariabackup --prepare \
--target-dir=/var/backup/full \ #증분데이터를 반영할 타켓 dir
--incremental-dir=/var/backup/inc #증분데이터위치

MyFault

mariabackup: command not found

 - MariaDB-server package에 mariabackup이 포함되지 않아서 따로 설치해주어야 한다.

(https://jira.mariadb.org/browse/MDEV-14963)

 - OS별 mariabackup 설치

(https://mariadb.com/kb/en/mariabackup-overview/#installing-on-linux)

 

command입력 후 mariabackup error cannot mkdir 2 오류

 - --target-dir에 설정된 directory 생성 오류이다. 지정한 디렉터리의 상위 디렉터리가 없으므로 생성해주자

(https://jira.mariadb.org/browse/MDEV-14964)

 

Access denied for user

 - 접속 계정의 권한 설정, 허용 IP 확인, 비밀번호는 항상 쿼테이션으로 감싸주자

 

mysql server through socket '/var/lib/mysql/mysql.sock'

 - mysql.sock 파일을 찾지 못한다.  파일 찾은 후 --sock 옵션으로 파일 지정해준다.

find / -name mysql.sock

More....

  • 백업하는 계정은 어떤 권한만 주면 될까
  • innodb만 가능한가?
  • MyISAM 테이블은 no-lock 옵션 적용 안된다. lock이 안되어 일관성이 없는 백업 가능성, 해당 테이블이 백업 시점에 갱신이 발생할 수 있는 테이블인지 확인하면 될까?
  • Point-In-Time-Recovery

Reference

 

 

Comments