Server/Linux

[Aws Ubuntu] Mariadb 백업하기 (mariabackup)

잔소리대마왕 2024. 1. 16. 19:36

서버나 DB 이슈로 인해 데이터 롤백이 필요하거나 복구가 필요한 경우를 위해 mariadb를 백업하는 방법을 알아보겠습니다. 

백업은 Mariabackup을 사용해보려고 합니다.

 

Mariabackup이란?

- MySQL과 MariaDB 에서 사용하던 무료 백업 라이브러리인 Percona XtraBackup을 바탕으로 작성된 포크입니다.

- DB 데이터를 통째로 복사하는 물리적 백업입니다.

- 복사 작업 중에 데이터에 업데이트가 발생할 수 있으므로 일관된 백업을 수행하기 위해 특별한 주의를 기울여야 합니다.

- MariaDB 10.3 버전 이상부터는 Percona XtraBackup이 지원되지 않기 때문에, Mariabackup을 사용해야 합니다.

 

전체 백업(Full backup)이란?

- 증분 백업이 참조할 기본 백업 데이터 입니다.

- 증분 백업을 실행하기 이전에 반드시 전체 백업을 먼저 실행해야 합니다.

backup_type = full-backuped
from_lsn = 0 (시작 지점)
to_lsn = 22886365542 (종료 지점)
last_lsn = 22886365551

 

 

증분 백업(Incremental Backup)이란?

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

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

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

backup_type = incremental
from_lsn = 22886365542 (기본 백업 데이터의 'to_lsn'을 기준으로 백업을 실행)
to_lsn = 22886370181
last_lsn = 22886370190

 

0. AWS CLI 설치

aws s3에 백업을 하기 위해 aws cli를 설치하고,

AmazonS3FullAccess 권한을 가지고 있는 Access Key ID, Secret Access Key로 세팅을 해보겠습니다.

# 1. Python 및 pip 설치
sudo apt update
sudo apt install python3 python3-pip

# 2. AWS CLI 설치
pip3 install awscli --upgrade --user

# 3. 설치 확인
aws --version

# 4. aws cli 세팅 (Access Key ID, Secret Access Key 입력)
aws configure

 

 

1. 전체 백업 (Full backup) 하는 방법

원하는 위치에 fullbackup.sh를 만들어 주시고,

하단의 내용을 넣어주시면 됩니다.

YEAR=$(date '+%Y')     #ex) 2024
MONTH=$(date '+%m')    #ex) 01
DATE=$(date '+%Y%m%d') #ex) 20240116

# 해당 연월의 경로 생성
sudo mkdir -p /db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}

# 해당 경로에 fullbackup 실행
sudo rm -rf /db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}/*
sudo mariabackup --backup --binlog-info=OFF --target-dir=/db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}/ --user=user --password=password

# 백업 파일 READ 권한 부여
sudo chmod +r -R /db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}

# last-checkpoint로 최신 파일 복사
sudo rm -rf /db-backup/last-checkpoint/*
sudo cp -r /db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}/* /db-backup/last-checkpoint/

# AWS S3 저장소 백업파일 업로드 : db-backup-s3
sudo aws s3 cp /db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}/ s3://db-backup-s3/fullbackup/${YEAR}/${MONTH}/${DATE}/ --recursive

 

2. 증분 백업 (Incremental  backup) 하는 방법

원하는 위치에 increbackup.sh를 만들어 주시고,

하단의 내용을 넣어주시면 됩니다.

YEAR=$(date '+%Y')
MONTH=$(date '+%m')
DATE=$(date '+%Y%m%d')

# 해당 연월의 경로 생성
sudo mkdir -p /db-backup/increbackup/${YEAR}/${MONTH}/${DATE}

# 해당 경로에 incremental backup 실행
sudo rm -rf /db-backup/increbackup/${YEAR}/${MONTH}/${DATE}/*
sudo mariabackup --backup --target-dir=/db-backup/increbackup/${YEAR}/${MONTH}/${DATE}/ --incremental-basedir=/ddrive/db-backup/last-checkpoint --user=user --password=password

# 백업 파일 READ 권한 부여
sudo chmod +r -R /db-backup/increbackup/${YEAR}/${MONTH}/${DATE}

# last-checkpoint로 최신 파일 복사
sudo rm -rf /db-backup/last-checkpoint/*
sudo cp -r /db-backup/increbackup/${YEAR}/${MONTH}/${DATE}/* /db-backup/last-checkpoint/

# AWS S3 저장소 백업파일 업로드
sudo aws s3 cp /db-backup/increbackup/${YEAR}/${MONTH}/${DATE}/ s3://db-backup-s3/test-db/increbackup/${YEAR}/${MONTH}/${DATE}/ --recursive

 

3. 스케줄러 돌리는 방법

crontab -e를 실행시켜주시고

아래의 명령어를 입력 후 저장해주시면 됩니다 : >

# MariaDB Full Backup Upload 매주 월요일 새벽 3시 30분
30 3 * * 1 /home/ec2-user/backup-sh/fullbackup.sh >> /ddrive/db-backup/log/fullbackup/`date "+\%Y\%m\%d"`.txt 2>&1

# MariaDB Incremental Backup Upload 매주 화~일 새벽 3시 30분
30 3 * * 2-7 /home/ec2-user/backup-sh/increbackup.sh >> /ddrive/db-backup/log/increbackup/`date "+\%Y\%m\%d"`.txt 2>&1

#7일 지난 백업파일 삭제 (매주 월요일 새벽 3시 20분)
20 3 * * 1 sudo find /ddrive/db-backup/fullbackup/* -mtime +7 -exec rm -rf {} \;
20 3 * * 1 sudo find /ddrive/db-backup/increbackup/* -mtime +7 -exec rm -rf {} \;

# 로그파일 저장소와 동기화 (매일 3시 35분)
35 3 * * * sudo aws s3 sync /ddrive/db-backup/log/ s3://db-backup-s3/test-db/log/