서버나 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/
'Server > Linux' 카테고리의 다른 글
[CentOS] Rocky Linux 서버에서 NTP 동기화 문제 해결(chrony) (0) | 2024.07.29 |
---|---|
[Ubuntu linux] MongoDB AWS S3 백업하기 (0) | 2024.01.17 |
[Aws Ubuntu] MongoDB 유저 생성 및 권한 부여 (0) | 2023.12.13 |
[Ubuntu] Linux Aws CloudWatch Memory 및 용량 확인 (0) | 2023.10.31 |
[Ubuntu] Linux EC2 서버 시간 설정하기 (0) | 2023.10.31 |