DataBase/Maria DB

[DB/AWS] MariaDB Mariabackup을 이용한 백업 스케쥴 설정

Trillion Binary 2023. 2. 9. 13:16
SMALL

mysqldump는 SQL 형태로 백업과 복원을 진행하는 논리적 백업 입니다.

데이터베이스의 모든 행을 스캔하고 각각의 행과 테이블마다 Insert 구문을 생성합니다.
그 후 백업시에는 생성한 Insert 구문을 그대로 재생하면서 복원이 진행되는 방식입니다.

Mariabackup 은 MySQL과 MariaDB에서 사용된 무료 백업 라이브러리린
Percona XtraBackup을 바탕으로 작성된 포크 소프트웨어 입니다.
여기서 파생된 Mariabackup은 mysqldump에 비해 데이터가 증가할수록
백업과 복원에 걸리는 시간이 월등히 효율적입니다.

백업 및 복원 시간 비교 표 입니다.

Mariabackup은 원격으로 접속하여 실행이 불가합니다.
호스트에서 해당 MariaDB 서버로 접속하여 Mariabackup을 실행하여야 합니다.

하단 스크립트는 MariaDB 리눅스 서버 상에서
백업 쉘 스크립트를 실행해줄 스케쥴 설정 코드입니다.

$ crontab -e

SHELL=/bin/bash
MONTH=$(date +"%m")
YEAR=$(date +"%Y")

Full backup - 매주 월요일 새벽 3시30분 전체 백업
30 3 * * 1 /fullbackup/fullback.sh >> /fullbackup/$YEAR/$MONTH/log/full.log 2>&1

Incremental backup - 매주 화 ~ 일 새벽 3시30분 증분 백업
30 3 * * 2-7 /backup/increback.sh >> /backup/$YEAR/$MONTH/log/inc.log 2>&1

fullbackup.sh

$ vi fullbackup.sh

mariabackup --backup \
--target-dir=/var/mariadb/backup/ \
--user=mariabackup --password=PASSWORD

increback.sh

$ vi increback.sh

mariabackup --backup \
--target-dir=/var/mariadb/inc1/ \
--incremental-basedir=/var/mariadb/backup/ \
--user=mariabackup --password=PASSWORD

전체 백업은 증분 백업이 참조할 기본 백업 데이터입니다.
증분 백업을 실행하기 이전에 전체 백업을 먼저 실행한 상태여야 합니다.

증분 백업은 전체 백업 데이터의 로그 시퀀스 번호(이하 LSN)를 참조하여
마지막으로 변경된 지점부터 백업을 실행합니다.

LSN은 백업 데이터 디렉토리의 'xtrabackup_checkpoints' 파일에 표기됩니다.

첫번째 증분 백업은 전체 백업 데이터를 참조하지만, 이후에 추가로 진행되는
증분 백업은가장 최근에 진행된 증분 백업 데이터를 참조합니다.

전체 백업 데이터의 xtrabackup_checkpoints 내용입니다.

backup_type = full-backuped
from_lsn = 0
to_lsn = 1635102
last_lsn = 1635102

증분 백업 데이터의 xtrabackup_checkpoints 내용입니다.

backup_type = incremental
from_lsn = 1635102
to_lsn = 1635114
last_lsn = 1635114

이어서 이전 게시글에 작성한 리눅스 환경에서의 AWS S3 업로드 내용입니다.

AWS CLI 설치 및 버전확인을 합니다.

최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface (amazon.com)

 

최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

aws --version

AWS CLI 환경설정을 셋팅합니다.

aws configure

AWS Access Key ID [None] : 자신의 Accecss Key AWS
Secret Access Key [None] : 자신의 Secret Key
Default region name [None] : 자신의 region
Default output format [None] : json (text도 가능)

해당 설정 완료 후 파일 형태로 아래 경로에 생성이 됩니다.

~/.aws/config
~/.aws/credentials

CLI 명령어로 파일을 업로드 해주는 스크립트를 작성합니다.

$ vi fullbackupUpload.sh

#!/bin/sh

MONTH=$(date +"%m")
YEAR=$(date +"%Y")

aws s3 sync ./var/mariadb/backup s3://S3_DOMAIN.com/fullbackup/$YEAR/$MONTH
echo "DB FullBackup is uploading."

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

$ vi backupUpload.sh

#!/bin/sh

MONTH=$(date +"%m")
YEAR=$(date +"%Y")

aws s3 sync ./var/mariadb/inc1 s3://S3_DOMAIN.com/backup/$YEAR/$MONTH
echo "DB IncBackup is Uploading."

백업파일 업로드 스크립트를 실행하는 crontab 설정을 해줍니다.

$ crontab -e

MONTH=$(date +"%m")
YEAR=$(date +"%Y")

Full backup - 매주 월요일 새벽 3시40분 DB백업 업로드
40 3 * * 1 '/fullbackupUpload.sh' >> '/fullbackup/$YEAR/$MONTH/log/full.log'

Incremental backup - 매주 화 ~ 일 새벽 3시40분 DB백업 업로드
40 3 * * 2-7 '/backupUpload.sh' >> '/backup/$YEAR/$MONTH/log/inc.log'

crontab 상태 확인

$ crontab -l

참고자료 : Incremental Backup and Restore with Mariabackup

 

Incremental Backup and Restore with Mariabackup

Backing up incremental changes of a database

mariadb.com

 

BIG