시나리오
- 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
...