1. xtrabackup이란?
- xtraDB, InnoDB 기반의 무료 백업 솔루션이다.
- 데이터 파일을 복사하는 방식으로 동작하므로 데이터 파일 사이즈보다 많은 디스크 공간이 필요하다.
- 디스크 I/O를 유발한다. 따라서 백업을 위한 별도의 디스크가 필요하다.
2. innobackupex 옵션
--apply-log
- 백업 중에 일어나는 변경을 파일에 반영
- redo log 생성
--copy-back
- 복구 옵션, 복구된 파일을 복구 영역의 데이터 경로로 일괄적으로 옮기는 기능
- --defaults-file 옵션에 복구될 데이터베이스의 my.cnf 위치를 지정하면 옵션 파일의 datadir, ib_logfile의 위치 정보로 복구 데이터를 옮긴다.
- 한곳에 모인 백업 데이터를 하나하나 폴더에 나눠 옮기지 않아도 필요한 파일만 분산 저장되기 때문에 편리하다.
--incremental
- 증분 백업 옵션
--read-only
- 증분 백업 복구 시 옵션, redo log 반영 후 완료되지 않은 트랜잭션을 rollback 하지 않음
--slave-info
- 백업 시 사용, 마스터의 바이너리 로그 파일명, 포지션 정보, 호스트 정보를 xtrabackup_slave_info에 저장한다.
--databases
- 백업 시 사용, 백업 대상을 지정한다.
--parallel=[스레드 수]
- 백업 시 사용, 스레드 수 만큼 병렬적으로 작업한다.
- innodb_file_per_table이 1이어야 한다.
--incremental-dir=[증분 백업 경로]
- 증분 백업 본으로 복구 시에 증분 백업 파일 경로 지정
3. 전체 데이터베이스 백업 예제
3-1. 전체 데이터베이스 백업
$ innobackupex --default-file=/etc/my.cnf --user=root --password=rootroot /backup/mysql/full
3-2. 증분 데이터베이스 백업
1) 먼저 전체 데이터베이스 백업 수행
$ innobackupex --default-file=/etc/my.cnf --user=root --password=rootroot /backup/mysql/full
- 백업된 디렉토리 확인 (백업 진행 날짜/시간 형식 하위 디렉토리)
- 백업 정보 확인
$ cat xtrabackup_checkpoints
from lsn 확인, 0부터 시작하면 전체 백업
2) 다음 증분 데이터베이스 백업 수행 (1차)
$ innobackupex --default-file=/etc/my.cnf --user=root --password=rootroot /backup/mysql/inc1 --incremental --incremental-basedir=/backup/mysql/full/[하위백업경로]
혹은 --incremental-lsn=[LSN번호]와 같이 LSN을 직접 지정할 수 있다.
- 백업된 디렉토리 확인 (백업 진행 날짜/시간 형식 하위 디렉토리)
- 백업 정보 확인, from lsn 확인, 지난 전체 데이터베이스 백업 수행 이후인지 확인
$ cat xtrabackup_checkpoints
from lsn 확인, 0부터 시작하면 전체 백업
3) 다음 증분 데이터베이스 백업 수행 (2차)
$ innobackupex --default-file=/etc/my.cnf --user=root --password=rootroot /backup/mysql/inc2 --incremental --incremental-basedir=/backup/mysql/full/[하위백업경로]
혹은 --incremental-lsn=[LSN번호]와 같이 LSN을 직접 지정할 수 있다.
- 백업된 디렉토리 확인 (백업 진행 날짜/시간 형식 하위 디렉토리)
- 백업 정보 확인, from lsn 확인, 지난 전체 데이터베이스 백업 수행 이후인지 확인
$ cat xtrabackup_checkpoints
from lsn 확인, 0부터 시작하면 전체 백업
3-3. 개별 테이블 백업
$ innobackupex --default-file=/etc/my.cnf --user=root --password=rootroot --include='^hr.salarytables' /backup/mysql/hr/table
- 백업된 디렉토리 확인
- 백업된 개별 데이터파일 확인 (*.frm, *.ibd)
4. 복구 시나리오
- 백업본 로그 적용 및 redo log 생성
- MariaDB 종료
- 기존 데이터파일 이동
- 백업 파일을 데이터파일 경로로 복사
- MariaDB 기동 (Read-only)
- Binary Log 적용
- MariaDB 재기동