Database

[Database] Linux-Docker-Mysql 데이터베이스 자동 백업

전자기린 2021. 11. 29. 15:31

backup/database에 주기적으로 백업 데이터를 저장하는 방법 입니다.

해당 글은 백업 스크립트는 backup 폴더에 생성하는 것을 기준으로 하고 있습니다.

 

 

1. 폴더를 생성합니다. (스크립트 보관 및 백업데이터 보관용)

# 경로 생성
mkdir /backup
mkdir /backup/database

2. 스크립트 생성

# 스크립트를 생성합니다.
vi /backup/backup_db.sh

# 생성 후 i를 눌러 데이터를 입력합시다. (아래 코드(2.1) 붙여 넣기(마우스 우클릭))
# 입력 후에 ESC를 누르고 :wq를 입력하고 빠져나옵니다.

2.1

#!/bin/sh


echo "============= 20일 지난 데이터 삭제 시작 ============="
# 20일이 지난건 지워버림
DEL_FILE=`date -d "-20 days" +%Y%m%d`

rm -rf /backup/database/mysql_db_bak_${DEL_FILE}.sql
echo "============= 20일 지난 데이터 삭제 완료 ============="


echo "============= 변수 할당 시작 ============="
 DATE=`date +"%Y%m%d"`
 USER="DB접속 계정"
 PASSWORD="DB접속 암호"
 DATABASE="데이터베이스 명"
 CONTAINER="Docker mysql 컨테이너 명"
 OUTPUT_PATH="/backup/database/mysql_bak_${DATABASE}_${DATE}.sql"
echo "============= 변수 할당 완료 ============="


echo "============= Database 백업 시작 ============="
 docker exec ${CONTAINER} /usr/bin/mysqldump -u${USER} -p${PASSWORD}  ${DATABASE} > ${OUTPUT_PATH}
 chown root.root  ${OUTPUT_PATH}
 chmod 755  ${OUTPUT_PATH}
echo "============= Database 백업 완료 ============="

3. crontab를 사용하여 특정 시간에 스크립트 자동 실행

# 설정 열기
crontab -e

4. 반복 시간(분, 시, 월, 일, 요일) 및 반복 파일 설정

분(0~59), 시(0~23), 일(1~31), 월(1~12), 요일(0~7 : 0,7은 일요일)

명령어는 무조건 한줄로 입력!, 줄 바꿈으로 여러 명령어 설정 가능

00 02 * * * bash /backup/backup_db.sh

# 생성 후 i를 눌러 데이터를 입력합시다. (아래 코드(2.1) 붙여 넣기(마우스 우클릭))
# 입력 후에 ESC를 누르고 :wq를 입력하고 빠져나옵니다.

5. 수정 사항 적용

service crond restart

6. 반영 결과 확인

crontab -l