본문 바로가기
database/mysql

XtraBackup install ,full backup


 XtraBackup

- GPL 라이선스 기반의 백업 오픈소스

- Inno DB,XtraDB 엔진을 사용하는 데이터만 백업이 가능

- Mysqldump는 백업 대상의 데이터베이스의 데이터를 모두 읽어서 문서 형태로 나타내는 논리적 백업으로 많은 시간이 걸리지만,
XtraBackupd은 백업 대상데이터베이스의 데이터 파일을 복사, 백업중 변경 된 데이터 블록은 별도로 백업하는 물리적인 백업 방식

- 서비스트 트랙잭션을 중단 시키지 않고도 데이터 백업을 할 수 있는 핫 백업 소프트 웨어
=> 디렉토리 자체를 복사 하기 때문에 백업 및 복구에 mysqldump 에 비하여 빠르며, innoDB엔진을 적용 한 테이블에 대하여
Lock 을 걸지 않고 백업이 가능하다.


XtraBackup install

설치 OS: Centos 7.0 64bit

아래와 같이 Redhat 계열에서는 Percona yum Repository 등록후 yum 으로 설치 가능하며,
각 OS 버전에 맞춰서 공식 홈페이지에서 다운로드 및 설치가 가능 하다.

## Percona yum Repository 등록 및 설치 진행 
[root@node201 ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
[root@node201 ~]# yum install percona-xtrabackup.x86_64

## 설치된 패키지를 확인 한다.

 

## Percona yum Repository 등록 및 설치 진행 

 

[root@node201 ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
[root@node201 ~]# yum install percona-xtrabackup.x86_64

## 설치된 패키지를 확인 한다. 

 

[root@node201 ~]# rpm -qa | grep xtra

percona-xtrabackup-2.3.4-1.el7.x86_64

 

 

## 설치 되면 XtraBackup,innobackupex 등 바이너리 파일이 생성 된다.
XtraBackup은 
The  xtrabackup  binary is a compiled C program that is linked with the InnoDB libraries and the standard MySQL client libraries
 로 나와 있으며, C언어로 컴파일 되어 있는 mysql 의 표준 클라이언트 라이브러리로 링크 되어 있다.
가장 큰 장점이자 단점은 백업엔진은 xtraDB,innoDB만 가능 하다.

innobackupex은 man page에서 
The  innobackupex  tool is a Perl script that acts as a wrapper for the xtrabackup C program.
로 나와 있다. 즉 XtraBackup을 포함 하고 있는 perl  스크립트로 XtraBackup의 확장된 스크립트이다. XtraBackup 에 확장 기능을 포함하며, 
가장 큰 차이는 XtraBackup는 MyISAM  엔진과 같이 트렌젝션을 지원 하지 않는 엔진의 테이블도 백업이 가능하다.
(perl 스크립트로 인하여 소스 컴파일 설치시 perl 이 의존성으로 설치 되어야 정상적으로 설치 된다.)


## 그외 백업되는 데이터를 암호화,복호화 하는 xbcypt, 백업 결과파일을 묶을 수 있는 xbstream 등이 같이 바이너리 형태로 설치 된다.

※ innobackupex 는 MyISAM  등과 같은 non-inno-DB 엔진백업이 가능 한데 이럴 경우 hot backup 이 불가능 하다,
그렇지 때문에 innodb,xtraD후B 백업후 non-inno-DB 백업시 non-inno-DB에 대한 백업 보장을 위헤 FLUSH TABLES WITH READ LOCK 을 통하여, LOCKING된다.
만약 FLUSH TABLES WITH READ LOCK을 skip 하기 위해서는 --no-lock 옵션을 추가 하여 skip할 수 있다. 이때는 non-inno-DB 엔진의 테이블에 대하여 
일관성을 보장 하지 않는다.



innobackupex 전체백업

#innobackupex 명령어를 이용하여 전체 백업을 진행 한다. 
#기본적으로 아래와 같이 mysqldump 와 비슷한 형태로  유저와 해당 계정의 비밀번호, 백업 경로를 지정한다.

 

[root@node201 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password='12345' ./backup/
160514 23:54:03 innobackupex: Starting the backup operation

IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex
           prints "completed OK!".

Can't locate Digest/MD5.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at - line 693.
BEGIN failed--compilation aborted at - line 693.
160514 23:54:03 Connecting to MySQL server host: localhost, user: root, password: set, port: 0, socket: /var/lib/mysql/mysql.sock
Using server version 5.6.30-log
innobackupex version 2.3.4 based on MySQL server 5.6.24 Linux (x86_64) (revision id: e80c779)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /var/lib/mysql
xtrabackup: open files limit requested 0, set to 1024

... 생략

160514 23:54:05 Backup created in directory '/root/backup//2016-05-14_23-54-03'
MySQL binlog position: filename 'mysql-bin.000004', position '344374'
160514 23:54:05 [00] Writing backup-my.cnf
160514 23:54:05 [00]        ...done
160514 23:54:05 [00] Writing xtrabackup_info
160514 23:54:05 [00]        ...done
xtrabackup: Transaction log of lsn (2120520) to (2120520) was copied.
160514 23:54:06 completed OK!

# 해당 백업 경로를 확인 하면 백업한 날짜의 디렉토리가 생성 된것을 확인 할 수 있다.
[root@node201 ~]# ls -al ~/backup/
합계 12
drwx------  3 root root 4096  5월 14 23:54 .
dr-xr-x---. 8 root root 4096  5월 14 23:54 ..
drwx------  5 root root 4096  5월 14 23:54 2016-05-14_23-54-03

# 해당 디렉토리를 확인 하면 아래와 같은 백업된 파일들을 확인 할 수 있다.

[root@node201 ~]# ls -al ~/backup/2016-05-14_23-54-03/
합계 12328
drwx------ 5 root root     4096  5월 14 23:54 .
drwx------ 3 root root     4096  5월 14 23:54 ..
-rw-r----- 1 root root      387  5월 14 23:54 backup-my.cnf
drwx------ 2 root root     4096  5월 14 23:54 dummy
-rw-r----- 1 root root 12582912  5월 14 23:54 ibdata1
drwx------ 2 root root     4096  5월 14 23:54 mysql
drwx------ 2 root root     4096  5월 14 23:54 performance_schema
-rw-r----- 1 root root       24  5월 14 23:54 xtrabackup_binlog_info
-rw-r----- 1 root root      113  5월 14 23:54 xtrabackup_checkpoints
-rw-r----- 1 root root      496  5월 14 23:54 xtrabackup_info
-rw-r----- 1 root root     2560  5월 14 23:54 xtrabackup_logfile


xtrabackup 전체백업

#xtrabackup도  백업 방법은 유사 하나 해당 target-dir 옵션을 별도로 지정 해줘야 한다.
[root@node201 innobackup]# xtrabackup --defaults-file=/etc/my.cnf --target-dir=./innobackup/ --user=root --password='12345'  --backup

innobackupex 와 다르게 해당 백업 디렉토리를 확인 하면 날짜로 된 디렉토리가 아닌 해당 디렉토리로 아래와 같이 백업 파일이 저장 된다.

[root@node201 innobackup]# ls -al
합계 12328
drwxr-xr-x  5 root root     4096  5월 15 00:39 .
dr-xr-x---. 9 root root     4096  5월 15 00:39 ..
-rw-r-----  1 root root      387  5월 15 00:39 backup-my.cnf
drwx------  2 root root     4096  5월 15 00:39 dummy
-rw-r-----  1 root root 12582912  5월 15 00:39 ibdata1
drwx------  2 root root     4096  5월 15 00:39 mysql
drwx------  2 root root     4096  5월 15 00:39 performance_schema
-rw-r-----  1 root root       24  5월 15 00:39 xtrabackup_binlog_info
-rw-r-----  1 root root      113  5월 15 00:39 xtrabackup_checkpoints
-rw-r-----  1 root root      520  5월 15 00:39 xtrabackup_info
-rw-r-----  1 root root     2560  5월 15 00:39 xtrabackup_logfile


반응형