--0. XtraBackup이란

 
- xtraDB, InnoDB 기반의 오픈소스 HOT 백업 솔루션 
- 설치 시 같이 설치되는 innobackupex를 통해 myIsam 등의 DB도 백업 가능함
- 데이터 파일을 복사하는 방식으로 동작하므로 데이터 파일 사이즈보다 많은 디스크 공간이 필요함
- 디스크 I/O를 유발하므로 백업을 위한 별도의 디스크가 필요함
- 기본적으로 제공되는 논리 백업 방식의  mysqldump와는 달리 물리적 백업 방식 사용
  -> 논리 백업 : 백업 대상 데이터베이스의 스키마 객체와 테이블 데이터를 재생성 할 수 있는 SQL 문장을 생성하는 방식
 

 

--1. percona XtraBackup 설치

 
sudo yum install -y libev
sudo yum install -y perl-DBD-MySQL
sudo yum install -y perl-Time-HiRes
 
# 64bit 인 경우 (libev) - el6
wget https://dl.fedoraproject.org/pub/epel/6/x86_64/libev-4.03-3.el6.x86_64.rpm
sudo rpm -Uvh libev-4.03-3.el6.x86_64.rpm
 
## XtraBackup 설치
 
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.2/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.2-1.el6.x86_64.rpm
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.2/binary/redhat/6/x86_64/percona-xtrabackup-24-debuginfo-2.4.2-1.el6.x86_64.rpm
sudo rpm -Uhv percona-xtrabackup-24-2.4.2-1.el6.x86_64.rpm
sudo rpm -Uhv percona-xtrabackup-24-debuginfo-2.4.2-1.el6.x86_64.rpm
 
 
 

--2. 백업

 

1) 옵션

 
- user 
백업 대상 데이터베이스에 접근할 수 있는 권한을 가진 mysql 서버 계정
ex)  create user 'bck_usr'@'%' identified by 'test';
     grant reload, lock tables, replication client on *.* to 'bck_usr'@'%';
     flush privileges;
 
- defaults-file
백업 대상 mysql DB의 my.cnf 지정, datadir 시스템 변수와 InnoDB 관련 시스템 변수 등의 정보 참조하기 위함
 
- incremental-lsn
증분 백업 수행 시 사용하는 옵션으로 incremental-basedir 옵션 사용 대신 사용자가 직접 LSN 값 명시
 
- incremental-basedir
증분 백업 수행 시 사용하는 옵션으로, 이전 단계에 백업받은 폴더의 위치를 지정하면 마지막 백업 완료 시점의 LSN 이후부터 증분백업 수행
 
*LSN (Log Sequence Number) : Mysql 데이터베이스의 시스템 버전 값, 데이터 변경 발생 시 LSN 값 증가함. 오라클의 SCN과 유사
 
- include
백업 시 사용하는 옵션으로, 백업 대상 객체 지정하는 옵션
 
- databases
백업하려는 대상 데이터베이스 객체를 지정하는 옵션
 
- slave-info
레플리케이션 구성 된 DB에서 master 가 아닌 slave 에서 백업을 수행하기 위한 옵션
 
- apply-log
백업 수행 중 변경데이터를 백업파일에 적용하는 옵션, apply-log 적용 후 데이터 사용 가능
 
 
 

2) 백업 단계

 
0. 백업 전 테이블 생성
 
MariaDB [(none)]> select count(*) from dohee.backup_test;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)
 
 
-1. innobackupex --defaults-file=/engn001/masvc01/TEST/mysql/my.cnf --user=root --password='dhtkak' /engn001/masvc01/TEST/
 
-> full-backup 수행
-> defaults-file 옵션의 my.cnf 를 읽고 백업 대상 DB의 파일 위치등을 읽어옴
 
->HOT 백업 수행 중 변경데이터에 대해 log file에 기록함 (xtrabackup_logfile 에 저장됨)
->2017-07-09-05-17-54 백업 디렉토리에 백업 수행
 
-> InnoDB 백업이 끝나고 다른 엔진들 백업 시작
 
 
-> non-InnoDB 백업 완료 후 full-backup 정상완료
 
 
 
-2. innobackupex --defaults-file=/engn001/masvc01/TEST/mysql/my.cnf --apply-log /engn001/masvc01/TEST/2017-07-10_01-53-00
->defaults-file 옵션의 my.cnf 정보를 읽고 복구 단계에서 사용할 InnoDB 정보 읽어옴
 
-> 백업 수행 중 변경된 리두 로그 백업 파일을 적용하고, 복원 대상 DB에서 사용할 리두로그 생성
 
-> 적용 완료
 

* 참고

백업 완료 후 아래와 같은 백업관련 파일들이 생성됨
 
[ip-172-31-18-38:masvc01]/engn001/masvc01/TEST/2017-07-09_13-24-58] ls -ltr xtra*
-rw-r----- 1 masvc01 mysql       30 Jul  9 13:25 xtrabackup_binlog_info
-rw-r----- 1 masvc01 mysql      570 Jul  9 13:25 xtrabackup_info
-rw-r--r-- 1 masvc01 mysql       51 Jul  9 13:27 xtrabackup_binlog_pos_innodb
-rw-r----- 1 masvc01 mysql 16842752 Jul  9 13:28 xtrabackup_logfile
-rw-r----- 1 masvc01 mysql      113 Jul  9 13:28 xtrabackup_checkpoints
 
1) xtrabackup_binlog_info 
백업완료 시점의 바이너리 로그 파일과 포지션 정보를 기록한 파일
after_Backup_4 <- 백업 완료 시점
after_Backup_4_1 <- show master status 와 동일
 
2) xtrabackup_logfile
핫백업 수행 중 데이터가 변경된 블럭을 복사한 파일. 위에서 살펴 본 apply-log를 통해
백업 데이터에 적용함.문서편집도구 (vi) 로 읽을 수 없음
 
3) xtrabackup_checkpoints
after_backup_4_2
백업 파일의 종류 ( full-backup / incremental-backup ) 와 LSN 을 기록한 파일
 
4) xtrabackup_info
after_backup_4_3
백업수행 관련 정보를 기록한 파일
 
 

3) 복구 단계

 
-0. table drop

 
 
-1. innobackupex --defaults-file=/engn001/masvc01/TEST/mysql/my.cnf --copy-back /engn001/masvc01/TEST/2017-07-09_05-17-54/
 -> backup 받은 파일들을 my.cnf를 참조하여 해당 위치로 copy함
 
* 이 때 해당 디렉토리에 파일들이 있으면 에러 발생
 
 
 
백업 & 복구 성공