반응형
xtrabackup 툴을 사용하여 mysql DB 증분(변경분) 백업하는 방법을 정리합니다.
xtrabackup이란
- mysql, mariadb 등의 DB 백업에 사용되는 오픈소스이다.
- mysqldump가 테이블 생성, 데이터 쿼리에 대한 SQL 생성문을 갖는 논리적 백업이라면, XtraBackup은 엔진 데이터를 그대로 복사하는 백업 방식이다.
- 대용량 백업에는 mysqldump보다 XtraBackup이 더 빠르다.
증분백업 (Incremental Backup)이란
- LSN(log sequence number)개념을 사용한다.
- 증분백업은 이전 증분백업이나 full backup의 LSN보다 최신(LSN이 더 큰)의 데이터를 복사한다.
xtrabackup 설치
# percona repository 다운
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
# xtrabackup 패키지 확인
yum list | grep percona-xtrabackup
# xtrabackup 패키지 설치
yum install percona-xtrabackup-24.x86_64 -y
# xtrabackup 패키지 설치 확인
yum list installed | grep percona-xtrabackup
xtrabackup 백업용 DB 계정 생성
# 원격 백업용 유저 생성
CREATE USER 'xtrabackup'@'%' IDENTIFIED BY 'xtrabackup@' ;
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT,SUPER ON *.* TO 'xtrabackup'@'%' ;
FLUSH PRIVILEGES ;
xtrabackup 실행시 권한
xtrabackup 실행유저는
mysql의 DATA_DIR(/var/lib/mysql)에 READ, WRITE, EXECUTE 권한이 필요하다.
백업경로의 READ, WRITE, EXECUTE 권한이 필요하다.
1) full backup
증분백업을 하기 위해서는 반드시 full backup본이 있어야 한다. full backup본을 베이스로 해서 증분백업을 하기 때문이다.
xtrabackup --backup --target-dir=./xtrabackup_0205/base --user=root --password=root
2) incremental backup
xtrabackup --backup --target-dir=./xtrabackup_0205/inc1 --incremental-basedir=./xtrabackup_0205/base --user=root --password=root
xtrabackup --backup --target-dir=./xtrabackup_0205/inc2 --incremental-basedir=./xtrabackup_0205/inc1 --user=root --password=root
xtrabackup --backup --target-dir=./xtrabackup_0205/inc3 --incremental-basedir=./xtrabackup_0205/inc2 --user=root --password=root
3) apply log
full backup본을 베이스로 하여 증분백업을 적용하는 과정이다.
xtrabackup --prepare --apply-log-only --target-dir=./xtrabackup_0205/base
xtrabackup --prepare --apply-log-only --target-dir=./xtrabackup_0205/base --incremental-dir=/root/sunny/xtrabackup_0205/inc1
xtrabackup --prepare --apply-log-only --target-dir=./xtrabackup_0205/base --incremental-dir=/root/sunny/xtrabackup_0205/inc2
/root/sunny/xtrabackup_0205/base/xtrabackup_checkpoints 을 확인해보자. 최종적으로 /root/sunny/xtrabackup_0205/inc2/xtrabackup_checkpoints 의 LSN까지 적용된 것을 확인할 수 있다.
4) scp
복구를 진행할 DB서버에 백업본을 전송한다. 네트워크 부하를 낮추기 위해 압축한 후 전송하는 것도 고려할만 하다.
scp -r /root/sunny/xtrabackup_0205/base manage1:/root/sunny/xtrabackup_0205/
5) restore
복구를 진행할 때는 DB를 중지한다. /var/lib/mysql 경로에 백업파일을 복사하는 과정이다.
service mysqld stop
rm -rf /var/lib/mysql
xtrabackup --copy-back --target-dir=/root/sunny/xtrabackup_0205/base/
chown -R mysql:mysql /var/lib/mysql
service mysqld start
추가로 알아볼 것들
- 백업하는 동안 테이블 lock이 걸리면 어떡하지?
- apply log 할 때 매번 full backup본을 읽거나 복사하나? 그렇다면 그 부하를 줄이는 방법은?
참고자료
- percona 공식홈페이지
https://www.percona.com/doc/percona-xtrabackup/2.4/backup_scenarios/incremental_backup.html
- 배달의민족 블로그 (mysqldump vs Xtrabackup)
http://woowabros.github.io/experience/2018/05/28/billingjul.html
반응형
'기초 튼튼탄탄탄 > Database' 카테고리의 다른 글
postgreSQL DB 이중화 구성하기 (master-slave streaming replication & failover) (28) | 2020.10.08 |
---|---|
mysqldump -p 옵션 비밀번호에 특수문자가 있을 때 (4) | 2020.04.18 |
[mysql] 프로시저 생성/수정/실행 권한 주기 (4) | 2020.04.18 |
오픈소스 라이센스 GPL - xtrabackup 라이센스 (2) | 2020.02.12 |
[mysql] 함수 생성하기. 이름 마스킹처리하는 함수 (2) | 2020.02.07 |
댓글