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
  1. 백업된 디렉토리 확인 (백업 진행 날짜/시간 형식 하위 디렉토리)
  2. 백업 정보 확인
$ 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을 직접 지정할 수 있다.

  1. 백업된 디렉토리 확인 (백업 진행 날짜/시간 형식 하위 디렉토리)
  2. 백업 정보 확인, 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을 직접 지정할 수 있다.

  1. 백업된 디렉토리 확인 (백업 진행 날짜/시간 형식 하위 디렉토리)
  2. 백업 정보 확인, 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
  1. 백업된 디렉토리 확인
  2. 백업된 개별 데이터파일 확인 (*.frm, *.ibd)

 

4. 복구 시나리오

  1. 백업본 로그 적용 및 redo log 생성
  2. MariaDB 종료
  3. 기존 데이터파일 이동
  4. 백업 파일을 데이터파일 경로로 복사
  5. MariaDB 기동 (Read-only)
  6. Binary Log 적용
  7. MariaDB 재기동