Commit ecd0870a authored by JooHan Hong's avatar JooHan Hong

system/db backup modify2

parent 47ab079c
Pipeline #7014 passed with stages
in 1 minute and 22 seconds
...@@ -306,3 +306,117 @@ fi ...@@ -306,3 +306,117 @@ fi
# DBMS 백업 # DBMS 백업
DB 백업의 경우 위의 구성도와 같이 외부의 NFS 볼륨을 마운트한 후 진행한다.
```bash
# df -h /BACKUP
Filesystem Size Used Avail Use% Mounted on
172.24.0.135:/PDS/BACKUP/DBMS 1.5T 1.3T 258G 83% /BACKUP
```
다음과 같이 `mariabackup` 명령을 사용하여, 전체/증분백업을 수행한다.
```bash
#!/bin/bash
# Description: MariaDB Full/Inc Backup Script
# Author: juhanida21@nate.com
date=`date +"%Y-%m-%d"`
service="HONGSNET"
dst="/BACKUP/$service/FULL"
incdir="/BACKUP/$service/INC"
xbk="/usr/bin/mariabackup"
user="root"
password="패스워드"
slave="no" # yes | no
inc=5
mkdir -p $dst || exit 1
mkdir -p $incdir || exit 1
ulimit -Sn 65535
ulimit -Hn 65535
############ FULL ############
if [ ! -d $dst/0 ]; then
#최초 백업이라면..
if [[ $slave == "yes" ]]; then
$xbk --backup --slave-info --target-dir ${dst}/0 --user ${user} --password ${password}
else
$xbk --backup --no-lock --target-dir ${dst}/0 --user ${user} --password ${password}
fi
else
#증분백업의 전체백업본을 생성한다. 이 과정은 향후 증분백업 시 필요하기 때문이다.
if [ ! -d $incdir/0 ]; then
if [[ $slave == "yes" ]]; then
$xbk --backup --slave-info --target-dir ${incdir}/0 --user ${user} --password ${password}
else
$xbk --backup --no-lock --target-dir ${incdir}/0 --user ${user} --password ${password}
fi
fi
#최초 백업이 완료되었고, 증분을 수행해야할 경우
if [[ $slave == "yes" ]]; then
$xbk --backup --slave-info --target-dir ${dst}/1 --incremental-basedir ${dst}/0 --user ${user} --password ${password}
if [[ -d ${incdir}/$date ]]; then
rm -rf ${incdir}/$date
else
cp -rf ${dst}/1 ${incdir}/$date
fi
else
$xbk --backup --no-lock --target-dir ${dst}/1 --incremental-basedir ${dst}/0 --user ${user} --password ${password}
if [[ -d ${incdir}/$date ]]; then
rm -rf ${incdir}/$date
else
cp -rf ${dst}/1 ${incdir}/$date
fi
fi
#매일 백업된 전체백업의 준비를 한다. 만약 이 과정을 무시하면, 다음의 에러가 발생된다.
#error: applying incremental backup needs a prepared target.
$xbk --prepare --target-dir ${dst}/0
#위의 준비가 완료되었으면, 실제로 매일 백업된 증분백업을 전체백업으로 합친다.
$xbk --prepare --target-dir ${dst}/0 --incremental-dir ${dst}/1 --user ${user} --password ${password}
#이 과정은 전체백업에 대한 부분이므로, 증분백업된 내역은 제거한다.
rm -rf ${dst}/1
fi
find $incdir/ -ctime +${inc} -exec rm -rf {} \;
```
> 위의 스크립트의 핵심내역은 전체백업을 먼저 진행한 후 백업된 전체 본을 증분(`--incremental-basedir`)한다.
다음은 전체백업본에 대한 현황이다.
```bash
# ls -al /BACKUP/HONGSNET/
합계 0
drwxr-xr-x 4 root root 29 10월 12 2021 .
drwxr-xr-x 4 root root 45 3월 4 03:50 ..
drwxr-xr-x 3 root root 15 3월 4 01:11 FULL
drwxr-xr-x 9 root root 123 3월 4 01:11 INC
```
또한 증분백업본은 다음과 같다.
```bash
# ls -al /BACKUP/HONGSNET/INC/
합계 28
drwxr-xr-x 9 root root 123 3월 4 01:11 .
drwxr-xr-x 4 root root 29 10월 12 2021 ..
drwx------ 20 root root 4096 2월 28 01:09 0
drwx------ 20 root root 4096 2월 27 01:08 2023-02-27
drwx------ 20 root root 4096 2월 28 01:15 2023-02-28
drwx------ 20 root root 4096 3월 1 01:07 2023-03-01
drwx------ 20 root root 4096 3월 2 01:07 2023-03-02
drwx------ 20 root root 4096 3월 3 01:06 2023-03-03
drwx------ 20 root root 4096 3월 4 01:07 2023-03-04
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment