MariaDB

[MariaDB] DB백업(mariabackup - 풀백업 + 증분 백업)

ssucodelab 2025. 4. 3. 10:04

시나리오

  • mariabackup 으로 풀백업, 증분백업으로 진행
  • 풀백업 매주 월요일 새벽 실행
  • 증분백업 매주 화~일 새벽 실행
  • 7일 지난 백업파일 삭제
dbdata
   ├ mariadb # DB
   └ sh # 쉘 파일 폴더
      ├ fullbackup.sh # 풀 백업
      └ increbackup.sh # 증분 백업
data # NAS 마운트
   └ dbbackup # 백업관련 폴더
      └ log # 로그 폴더

기초과정

  • 백업저장 디렉토리 생성
# 폴더생성
> mkdir data
# NAS 공유가능 여부 확인
> showmount -e 10.10.100.100
# NAS 마운트
> mount -t nfs 10.10.100.100:/ssucode_nas /data
# 마운트 확인
> df -h

# 영구 등록
vi -b /etc/fstab

...
10.10.100.100:/ssucode_nas                  /data                   nfs     rw              0 0    >> 추가
...
  • 계정생성
> mysql -u root -p mysql
mysql> CREATE USER 'mariabackup'@'localhost' IDENTIFIED BY 'ssucode1234!@';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, BINLOG MONITOR, REPLICATION CLIENT ON *.* TO 'mariabackup'@'localhost';
mysql> GRANT CREATE, INSERT ON PERCONA_SCHEMA.* TO 'mariabackup'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exit
  • 백업 테스트
  • 풀 백업
# Full 백업
mariabackup --backup \
    --no-lock \
    --history \
    --user=mariabackup \
    --password='ssucode1234!@' \
    --databases='ssucode' \
    --target-dir=/data/dbbackup/fullbackup
  • 증분 백업
# Incre 백업
mariabackup --backup \
    --no-lock \
    --history \
    --user=mariabackup \
    --password='ssucode1234!@' \
    --databases='ssucode' \
    --target-dir=/data/dbbackup/increbackup \
    --incremental-basedir=/data/dbbackup/fullbackup
  • 백업 스크립트 작성
  • fullbackup.sh - 풀백업 + 일주일 지난 파일 삭제
#!/bin/bash

# 전역변수 선언
dir="/data/dbbackup/"
target_dir="${dir}fullbackup.`date +%Y%m%d`"

echo "target_dir ==== ${target_dir}"
echo "[$(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)] ssucode FullBackup Start."

# DB 전체 백업 실행
sudo mariabackup --backup \
    --no-lock \
    --user=mariabackup \
    --password='ssucode1234!@' \
    --databases='ssucode' \
    --target-dir=${target_dir}

# 일주일 지난 파일 삭제
sudo find ${dir} -type d -mtime +7 -name 'fullbackup*' -exec rm -rf {} +;

echo "[$(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)] ssucode FullBackup End."
  • increbackup.sh - 증분백업 + 일주일 지난 파일 삭제
#!/bin/bash

# 전역변수 선언
dir="/data/dbbackup/"
base_dir="`ls -1Artd ${dir}*backup.*| tail -n 1`"

target_dir="${dir}increbackup.`date +%Y%m%d`/"

echo "base_dir==== ${base_dir}"
echo "target_dir ==== ${target_dir}"
echo "[$(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)] ssucode IncrementalBackup Start."

# DB 증분 백업 실행
sudo mariabackup --backup \
    --no-lock \
    --user=mariabackup \
    --password='ssucode1234!@' \
    --databases='ssucode' \
    --target-dir=${target_dir} \
    --incremental-basedir=${base_dir}

# 일주일 지난 파일 삭제
sudo find ${dir} -type d -mtime +7 -name 'increbackup*' -exec rm -rf {} +;

echo "[$(date +%Y)-$(date +%m)-$(date +%d) $(date +%H):$(date +%M):$(date +%S)] ssucode IncrementalBackup End."
  • 실행권한 추가 및 크론탭 등록
# 실행권한 추가
> chmod 755 /dbdata/sh/fullbackup.sh
> chmod 755 /dbdata/sh/increbackup.sh

# 크론탭 등록
# 풀 백업: 매주 월요일 0시 0분 실행
# 증분 백업: 매주 화~일요일 0시 0분 실행
> crotab -e

...
0 0 * * 1 /dbdata/sh/fullbackup.sh >> /data/dbbackup/log/fullbackup.txt 2>&1
0 0 * * 2-7 /dbdata/sh/increbackup.sh >> /data/dbbackup/log/increbackup.txt 2>&1
...