Container 기반 Mysql8에서의 xtrabackup을 이용한 Full Backup / Restore 방법

몇일 전, Docker 를 이용한 DB 서버 이용 도중 DB 전체 백업(Full Backup)을 할 일이 생겼습니다.
백업 도중 Host machine 의 메모리 부족으로, OOM 이 동작하여 컨테이너가 계속 종료되는 일이 발생하여,
다른 백업 방법을 찾던 도중 오픈소스 백업 툴인 “xtrabackup” 을 이용하여 보았습니다.
mysqldump 와 대비해 장/단점이 뚜렷하여, 여러 방면으로 적용할 수 있어서 사용 방법을 포스팅 하도록 하겠습니다.

xtrabackup 이란?

– Mysql / Mariadb 등 에서 백업에 사용되는 오픈소스 백업 유틸리티
– xtrabackup은 엔진 데이터를 그대로 복사하여 백업 / 복구 하는 방식입니다.
– 대용량 백업의 경우 mysqldump 대비 xtrabackup 이 서버의 리소스 사용 및 속도면에서 매우 강력한 이점이 있다.
– 단점 : 데이터를 복사하여 백업하는방식이기 때문에 대용량 백업을 진행할 시, Backup Server에 충분한 용량 확보 필요

xtrabackup 설치

참고 사항

xtrabackup 설치는 Host와 Mysql Container 내부 둘 다 설치해야 하며, 설치과정은 동일하다.
(컨테이너 OS / Host OS확인 하여 각 버전에 맞춰 설치)

해당 가이드에선 docker / docker-compose / mysql container 는 이미 설치 되어 있는 상태에서 시작한다.

* mysql docker-compose.yml

주의 사항

xtrabackup 진행 시 mysql 데이터 복사가 진행될 때 로그가 매우 많이 쌓이기 때문에, 서버의 용량이 충분치 않다면 logrotate 설정이 필수로 되어 있어야 한다.

# docker-compose up -d

  • mysql8 container 기동 (-d : 백그라운드 실행)

# docker ps

  • Container ID 확인

# docker exec -it [Container ID] /bin/bash

  • Container 내부 접근

# apt update -y && apt upgrade -y

  • 패키지 최신화 진행

# apt install -y wget lsb-release

  • 설치에 필요한 패키지 설치
  • wget : xtrabackup 홈페이지에서 패키지파일(.deb) 을 가져와 설치하기 위함
  • lsb-release : OS의 배포판 버전 확인이 필요함

# lsb_release -a

  • OS 버전 확인
  • xtrabackup 다운로드 페이지 접근

URL : https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

  • mysql8 버전 이상의 경우, xtrabackup 8 버전 이상을 이용해야한다.
  • 다운로드 링크를 복사한다.

wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.28-21/binary/debian/buster/x86_64/percona-xtrabackup-80_8.0.28-21-1.buster_amd64.deb

  • 서버에 설치파일을 가져온다.

# dpkg -i percona-xtrabackup-80_8.0.28-21-1.buster_amd64.deb

# apt install -f -y  // 의존성 패키지 설치

# dpkg -i percona-xtrabackup-80_8.0.28-21-1.buster_amd64.deb

# xtrabackup           // 설치 확인

xtrabackup 을 이용한 백업 진행

참고 사항

해당 가이드에선 Full backup을 대상으로 작성 하였습니다.

# xtrabackup –backup –target-dir=/home/bak/xtra/

  • 백업 진행
  • 현재 매뉴얼에서는 가장 기본적인 백업 옵션만 넣어서 진행한다.
completed OK! 메세지 확인

xtrabackup을 이용한 복구

참고 사항

복구는 Host Machine 에서 진행한다.

# exit          // 컨테이너를 빠져나온다.

# docker-compose down       // 실행중이던 docker compose 종료

# du -sh /home/data/var/lib/mysql     // 삭제 전 데이터 파일 용량 확인

183G    /home/data/var/lib/mysql

# rm -rf /home/data/var/lib/mysql/     // 데이터 파일 전체 삭제

# xtrabackup –prepare –target-dir=/home/data/bak/xtra

  • 백업파일 무결성 확인 (–prepare 옵션)
[Xtrabackup] completed OK! 메시지 확인

# xtrabackup –copy-back –target-dir=/home/data/bak/xtra/ –datadir=/home/data/var/lib/mysql/

  • 복구 실행
  • –copy-back 옵션은 백업 파일을 복사하여 복구하는 것 이며, –move-back 은 백업 파일을 복사하지 않고 이동시켜 복구를 진행한다.(–move-back 옵션은 원본 백업 파일은 삭제 된다.)

[Xtrabackup] completed OK!   // 메시지 확인

  • 정상복구 확인 진행

# docker-compose up -d       // 컨테이너 기동

# docker exec -it [Container ID] /bin/bash        // 컨테이너 접근

# du -sh /var/lib/mysql          // 복구 후 용량 확인

183G    /var/lib/mysql         // 백업 전과 동일한 용량 확인

기존 데이터파일과 동일 용량 확인

# mysql -u root -p                           // mysql 접근

# show databases;                           // test db 확인

# use zabbix;

# select * from users;                   // 복구된 데이터 확인

삭제 전과 데이터가 동일한지 확인

참고 사항

MariaDB 10.1 이상 버전에선 Xtrabackup 대신 Mariabackup 을 사용하는 것 을 권장하며,
MariaDB 10.3 이상 버전부턴 Xtrabackup 자체가 지원 되지 않아, 반드시 Mariabackup 을 사용해야 한다.
– Mariabackup 은 암호화 , 압축된 테이블 및 기타 MariaDB 개선 사항과 함께 작동하도록 설계된 Xtrabackup의 포크 버전이다.
– 관련 URL : https://mariadb.com/kb/en/percona-xtrabackup-overview/#compatibility-with-mariadb-103-and-later

image_print
카테고리: Linux

호스트웨이 시스템 팀

호스트웨이 시스템1팀