본문 바로가기
DataBase/🦭Maria

[MariaDB] Mysql Shell Script로 매일 자동 백업하기

by 발개발자 2023. 1. 3.
반응형

  작업개요 

프로젝트 참여 개발자들이 개발서버 DB의 데이터들을 삭제하는 경우가 종종 있었다... (본인 포함) ㅡ.ㅡ;;

 

물론 개발서버 DB기 때문에 크리티컬하지 않은 데이터이지만, 프로세스를 확인하기 위해 다시 앞단의 데이터를 생성하기가 너무 번거롭고 백업정책은 있어야할 것 같아서 도입을 시작했다.

즉, 내가 귀찮아서 시작한다!

나의 귀찮음을 발판으로 우리에게 도움이 되길...

 

  백업작업 

Oracle을 사용할때는 As of Timestamp를 통해 스냅샷 찍어놓은 테이블의 과거데이터를 손쉽게 조회할 수 있었지만, MariaDB에서는 해당 기능이 없기 때문에 매일 한번씩 모든 테이블을 백업을 시키려 한다.

MariaDB의 Option을 통한 자동백업을 서치해봤지만, 자체 옵션으로 자동백업하는 방법은 현재까지 찾지 못해 shell로 작업을 진행하려고 한다.

 

mc갓용준

바ㅏㅏㅏㅏㅏㅏㅏㅏㅏ로ㅗㅗㅗㅗㅗ  shell을 시작하자.

 

  Shell

Shell로 작성할 로직은 아래와 같다.

 

1. 변수 세팅 (오늘날짜, 접속계정, 백업경로 등)

2. 테이블 덤프

3. 압축 파일 생성

4. 덤프 파일 삭제

5. 30일이 경과된 압축파일 삭제

 

#!/bin/sh

# 시작
echo "MYSQL 백업 시작"
echo ""
echo "덤프 시작 : `date '+%Y-%m-%d %H:%M:%S'`"
echo ""

#오늘날짜
export Today="`date '+%Y-%m-%d'`"

# 접속계정
DBUSER="user"
DBPASS="pass"
DBNAME="dbname"

# 백업경로
BACKUPDIR="/home/maridb-bakup/backup_file"
mkdir -p $BACKUPDIR/$Today

# 테이블 덤프
TABLELIST=`mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e "show tables;" | grep -v Tables_in_${DBNAME}`
DIR="${BACKUPDIR}/${Today}"

for THISTABLE in $TABLELIST
do
       TABLEDIR="${DIR}/${THISTABLE}.sql"
       echo "mysqldump $TABLEDIR"
       mysqldump -u$DBUSER -p$DBPASS $DBNAME $THISTABLE > $TABLEDIR
done
echo ""


#압축 시작
echo "압축 시작 : `date '+%Y-%m-%d %H:%M:%S'`"

# 덤프 파일 압축
BACKUPFILE="mysql_${Today}.tar.gz"
echo "tar -cvzf $BACKUPDIR/$BACKUPFILE $BACKUPDIR/$Today"
tar -cvzf ${BACKUPDIR}/${BACKUPFILE} ${BACKUPDIR}/${Today}

# 덤프 파일 삭제
rm -rf $BACKUPDIR/$Today

# 오래된 백업 파일 삭제 (30일 지난 파일 삭제)
find $BACKUPDIR -name '*.tar.gz' -ctime +30 -delete

# 종료
echo "덤프 완료 : `date '+%Y-%m-%d %H:%M:%S'`"

 

야물딱지게 주석을 달아놨으니 읽다보면 어려운 부분은 크게 없으리라 믿어 의심치 않는다.

다만, 주의 사항이 있다.

접속 계정을 세팅하는 부분에서 Password에 특수문자를 넣었다면 '로 감싸주거나 특수문자 앞에 \를 넣어 처리해주어야 한다. 그렇지 않다면 반갑지 않은 에러를 만나게 될 것이다 ㅎㅎ..

 

이제 사용할 crontab에서 sh파일에 대한 실행권한이 없을 수도 있으니 아래의 명령어로 권한도 추가해주자.

chmod +x 작성한shell_name.sh

 

 

  Crontab 추가

이제 shell은 만들어놨겠다. 매일 해당 shell을 실행시켜주면 된다.

아래의 명령어를 통해 crontab을 추가하자.

 

아래의 명령어를 입력한 후 Insert 모드로 변환하여,

crontab -e

 

아래와 같이 작성하면 이제 매일 오전 1시에 작성한 shell script가 작동하게 된다.

# 매일 오전 1시 shell 실행
0 1 * * * /home/maridb-bakup/작성한shell_name.sh

 

crontab 시간 맞추는게 헷갈리다면 아래의 사이트에서 직접 입력해보고 확인할 수 있다.

본인은 눈치챘듯이 스마트한 타입이 아니라, 맨날봐도 헷갈려서 자주 확인하곤 한다 ㅎ_ㅎ

사이트 개꿀

https://crontab.guru/

 

 

Crontab.guru - The cron schedule expression editor

 

crontab.guru

 

crontab 확인

crontab -l

해당 명령어를 통해 현재 적용중인 crontab 목록을 확인할 수 있다.

 

 

 

  정리

현재까지 알아본 바 mariaDB는 위와 같이 shell을 통해 DB를 주기적으로 백업하는게 일반적인 상황인 것 같다.따라서 shell과 crontab을 통해 매일 새벽 1시에 database를 dump 뜬 후 압축하는 정책을 만들 수 있었으며 그리 어려운 사항이 아니었다. 추후 좀 더 효율적이고 편한 백업방식이 있으면 업데이트할 것을 약속하며 글을 마무리한다.

 

 

그러면 오늘은 이만 바위~

반응형

댓글