Linux DB

MariaDB MySQL xtraDB, InnoDB 엔진 기반의 백업 복구를 위한 무료 솔루션 입니다.

기본 제공되는 Mysqldump 경우는 SQL 기반의 백업 방식이기에  데이터가 커질수록 다소 시간이 오래 걸리는 단점이 있으며, 이를 보안하기기 위한 다체로운 솔루션 들이 있으나, 대부분 라이선스 비용이 비싸므로, 무료로 제공되며, 많이 사용 되는 xtrabackup 간단한 사용법 내용 정리 입니다.

 

- 유의 사항

1) xtrabackup 경우 데이터 파일을 복사하는 방식으로 동작하기에 데이터 파일 사이즈보다 많은 양의 디스크 공간을 차지 합니다.

2) Disk I/O 저하가 발생되므로 DB 용량이 크고 같은 디스크 내에 백업하기 보다는 별도의 디스크를 사용하여 백업 하는 방안을 추천 합니다.

3) Datadir 에는 데이터베이스용 dir 외의 디렉터리는 백업이 정상적으로 이루어 지지 않습니다.

     예를 들어 innodb homedir logdir datadir 하위에 별도 디렉터리로 지정할 시에는 해당 디렉터리는 백업이 되나 안의 내용은 백업이 되지 않고 복원 시에도 정상적으로 되지

     않습니다. 일종의 버그로 확인 되고 있습니다.

 

FAQ에서는 많이 사용 되는 옵션과 백업 복원에 대해서만 우선 적으로 다루고 있으며, 추후

자세한 옵션 사용 법에 대해서 업데이트 예정 입니다.

 

테스트 환경

OS : CentOS 6.3 (32bit)

 

RPM 설치 방법

다운로드 URL : http://www.percona.com/downloads/XtraBackup/

사용하는 운영체제에 맞도록 버전과 sofrware 를 선택합니다.

 

Yum 설치 방법

 

OS 환경에 맞는 Yum repository 파일을 다운 받아 적용 합니다.

64bit : rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

32bit : rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.i386.rpm

 

이후 아래와 같이 설치를 진행 합니다.

[root@ home]# yum install xtrabackup

 

* RPM으로 설치하는 경우 perl-DBD-MySQL 의존성 에러가 발생 있습니다.

이때는 yum으로 Perl-DBD-MySQL 패키지를 설치하여 줍니다.

(xtrabackup perl 구동되는 방식이기에 perl 에서 mysql 접근 가능한 모듈 설치가 필요한 부분입니다.)

 

 

1) Full Backup

 

백업의 경우 백업을 디렉터리를 지정 해당 디렉터리 하위로 백업 진행 날짜/시간 형식으로 백업 됩니다.

 

우선 백업데이터가 저장될 디렉터리를 만들어 줍니다.

 

[root@ home]# mkdir mysqlxtra

[root@ home]# innobackupex  --defaults-file=/etc/my.cnf --user root --password '디비암호' /home/mysqlxtra

 

옵션 설명

--user : DB 접속 유저를 지정 합니다.

--password : DB 접속 유저의 암호를 기입 합니다. (특수문자 등이 포함된 경우 구문에러가 있으므로

' ' 묶어 기입합니다.)

--no-timestamp : 백업 디렉터리 경로를 직접 기입 경우 사용합니다. ( 옵션을 지정하지 않을 시는 날짜/시간 형식의 디렉터리에 백업 )

--apply-log : 복원 작업 백업 작업을 진행 로그를 적용하기 위해 사용되는 옵션

--defaults-file : my.cnf 파일을 지정 합니다.

 

위와 같이 명령어 실행 아래와 같이 작업이 완료 되면 정상적으로 백업이 완료 입니다.

 

150507 01:51:10  innobackupex: completed OK!

 

2) 증분 백업

증분 백업 full 백업을 진행 합니다.

 

증분 백업은 –incremental 옵션으로 할 수 있습니다.

어느 시점부터 백업을 시작할지 LSN(log sequence number)을 지정해야 하며, LSN 전달 방법은 아래와 같은 방법이 있습니다.

 

LSN(log sequence number) 값을 직접 지정하는 방법

–incremental-lsn=LSN

 

xtrabackup_checkpoints 파일이 있는 디렉토리를 지정하는 방법

–incremental-basedir=DIR

 

두 방법 모두 백업 디렉토리 하위의 xtrabackup_checkpoints 파일의 to_lsn 값을 이용하는 입니다.

[root@ 2015-05-07_01-51-03]# cat xtrabackup_checkpoints

backup_type = full-backuped

from_lsn = 0

to_lsn = 1595669

last_lsn = 1595669

compact = 0

 

[root@ 2015-05-07_01-51-03]# innobackupex --incremental-basedir=/home/mysqlxtra/2015-05-07_01-51-03  --user root --password '디비암호' /home/mysqlxtra

 

증분 백업 기존 백업에 합쳐지는 것이 아닌 날짜/시간 디렉터리에 별도로 생성 되므로 복원 시에는이들 데이터를 모두 합쳐야 합니다.

 

3) 복원

복원 시에는 데이터가 모두 복사되므로 기존의 my.cnf 파일은 복사하여 두고 기존 datadir 다른 명칭으로 변경 합니다.

[root@ 2015-05-07_01-51-03]# cp /etc/my.cnf /etc/my.cnf_ori

[root@ 2015-05-07_01-51-03]# mv /usr/local/mysql/var /usr/local/mysql/var_origi

 

my.cnf 파일 상의 datadir 경로와 동일하게 디렉터리 생성 권한 변경을 진행 합니다.

 

[root@ mysql]# mkdir /usr/local/mysql/var

[root@ mysql]# chown -R mysql.mysql /usr/local/mysql/var

 

백업 진행 로그를 적용합니다.

[root@ mysql]# innobackupex --apply-log /home/mysqlxtra/2015-05-07_01-51-03

 

복원을 진행 합니다.

[root@ mysql]# innobackupex --copy-back /home/mysqlxtra/2015-05-07_01-51-03

* 복원이 진행 디렉터리 내에는 어떠한 파일도 있어서는 안됩니다.

 

데이터 정상 유무를 확인 합니다.

 

4) 증분 복원

증분 백업을 복원 시에는 --apply-log 옵션과 --redo-only 옵션을 사용하여 증분 백업 디렉터리 순서대로 기존 full backup 적용 합니다.

 

[root@ mysql]# innobackupex --apply-log --redo-only  /home/mysqlxtra/2015-05-07_01-51-03

[root@ mysql]# innobackupex --apply-log --redo-only /home/mysqlxtra/2015-05-07_01-51-03 --incremental-dir=/home/mysqlxtra/2015-05-07_01-58                       

 

복원 방법은 동일 합니다.

 

[root@ mysql]# innobackupex --apply-log /home/mysqlxtra/2015-05-07_01-51-03

[root@ mysql]# innobackupex --copy-back /home/mysqlxtra/2015-05-07_01-51-03

 

여기까지 기본적인 xtrabackup 사용법을 알아 보았으며, 보다 자세한 사항의 경우 추후 업데이트

예정 입니다.

 

공식 홈페이지 http://www.percona.com/software/percona-xtrabackup

번호 제목 글쓴이 날짜 조회 수
65 MySQL Bash 스크립트를 활용한 로컬 백업 호스트웨이 2016.02.04 2064
64 [Oracle] 대량 자료 조회 Parallel 호스트웨이 2015.09.26 432
63 DB접속시 DNS 관련 오류 호스트웨이 2015.09.25 2723
62 MYSQL 접속 - 소켓 지정하여 접속하기 호스트웨이 2015.09.23 7357
61 [mysql] 작은 용량의 파일 로드 속도가 느려진 경우 호스트웨이 2015.09.22 391
60 [mysql] sqli, pdo 설정 확인 호스트웨이 2015.09.22 257
59 [mysql] /tmp/mysql.sock이 없다고 DB접속이 안되는 경우 호스트웨이 2015.09.21 542
58 [mysql] table 백업 호스트웨이 2015.09.21 221
57 [mysql] shell 자동화 호스트웨이 2015.09.20 285
56 MySQL DB 옵티마이저 사용법 호스트웨이 2015.09.18 596
55 MYSQL 동시접속자수 늘리기 호스트웨이 2015.09.18 595
54 지정된 시간 이상 질의를 계속 하는 질의문 잡아내기 호스트웨이 2015.09.15 364
53 MySQL Table 상태 확인, 복구 및 최적화 호스트웨이 2015.09.11 1259
52 MYSQL의 "too many connections" 에러 해결법 호스트웨이 2015.09.10 1761
51 mysql replication을 이용한 DB 백업 동기화 에러 발생시 (slave db 1062 error) 호스트웨이 2015.09.09 1279
50 MYSQL-날짜 관련 함수 모음 호스트웨이 2015.09.09 3685
49 MySQL 보안을 위한 전용관리계정으로 MySQL 관리하기 호스트웨이 2015.09.08 947
48 MySQL Processlist 콘솔 상에서 확인 호스트웨이 2015.09.07 304
47 Ubuntu mysql 삭제/재설치 호스트웨이 2015.09.04 4897
» MariaDB, MySQL 의 InnoDB 엔진 백업 솔루션 xtrabackup 호스트웨이 2015.05.07 3538