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 내부 접근
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-3.png)
# apt update -y && apt upgrade -y
- 패키지 최신화 진행
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-4.png)
# apt install -y wget lsb-release
- 설치에 필요한 패키지 설치
- wget : xtrabackup 홈페이지에서 패키지파일(.deb) 을 가져와 설치하기 위함
- lsb-release : OS의 배포판 버전 확인이 필요함
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-5.png)
# lsb_release -a
- OS 버전 확인
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-6.png)
- xtrabackup 다운로드 페이지 접근
URL : https://www.percona.com/downloads/Percona-XtraBackup-LATEST/
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-7.png)
- mysql8 버전 이상의 경우, xtrabackup 8 버전 이상을 이용해야한다.
- 다운로드 링크를 복사한다.
- 서버에 설치파일을 가져온다.
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-8.png)
# 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
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-9.png)
# xtrabackup // 설치 확인
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-10.png)
xtrabackup 을 이용한 백업 진행
참고 사항
해당 가이드에선 Full backup을 대상으로 작성 하였습니다.
# xtrabackup –backup –target-dir=/home/bak/xtra/
- 백업 진행
- 현재 매뉴얼에서는 가장 기본적인 백업 옵션만 넣어서 진행한다.
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-11.png)
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-12.png)
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/ // 데이터 파일 전체 삭제
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-13.png)
# xtrabackup –prepare –target-dir=/home/data/bak/xtra
- 백업파일 무결성 확인 (–prepare 옵션)
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-14.png)
# xtrabackup –copy-back –target-dir=/home/data/bak/xtra/ –datadir=/home/data/var/lib/mysql/
- 복구 실행
- –copy-back 옵션은 백업 파일을 복사하여 복구하는 것 이며, –move-back 은 백업 파일을 복사하지 않고 이동시켜 복구를 진행한다.(–move-back 옵션은 원본 백업 파일은 삭제 된다.)
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-15.png)
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-16.png)
[Xtrabackup] completed OK! // 메시지 확인
- 정상복구 확인 진행
# docker-compose up -d // 컨테이너 기동
# docker exec -it [Container ID] /bin/bash // 컨테이너 접근
# du -sh /var/lib/mysql // 복구 후 용량 확인
183G /var/lib/mysql // 백업 전과 동일한 용량 확인
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-17.png)
# mysql -u root -p // mysql 접근
# show databases; // test db 확인
# use zabbix;
# select * from users; // 복구된 데이터 확인
![](https://tech.hostway.co.kr/wp-content/uploads/2022/07/image-22.png)
참고 사항
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