mysqldump로 S3에 DB백업

희원·2023년 2월 23일
0

DB Mysql의 데이터를 편리하게 백업하고 롤백시킬 수 있는 기능인 mysqldump을 사용해보자

1. Session Manager로 EC2 접속

sudo su

2. 폴더 구조 구성

/data/mysql_backup/
- backup_files/
- shell_script/

3. shell_script폴더에 쉘스크립트 파일 만들기

db_backup.sh

#!/bin/bash

# 1. 변수설정
BAK_FILE_SAVE_PATH=/data/mysql_backup/database_backup_files # 백업파일과 로그파일이 저장되는 폴더
BAK_FILE_DIRECTORY=`date +"%Y%m%d"`
BAK_FILE_NM=_db_backup_`date +"%Y%m%d"`.sql # 백업파일명 (%Y%m%d는 실행되는 날짜)
BAK_LOG_FILE_NM=_db_backup_`date +"%Y%m%d"`.log # 백업 로그파일명
WEEK_AGO=`date -d '1 week ago' +"%Y%m%d"` # 1주전 백업파일을 지우는데, 1주일전 년월일을 저장하는 변수
#ThreeDays_AGO = `date -d '3 days' +"%Y%m%d"` 

MYSQL_HOST='mysql host number'
MYSQL_USER='mysql username'
MYSQL_PASSWORD='mysql password'
S3_SYNC_URL="s3://s3 주소"

# 2. 폴더만들기
mkdir ${BAK_FILE_SAVE_PATH}/${BAK_FILE_DIRECTORY}

# 3. 백업 및 로그 저장
# 백업 시작 로그 저장
echo `date +"%Y-%m-%d %H:%M:%S"`" <<< Database backup shell script start!>>>" >> ${BAK_FILE_SAVE_PATH}/${BAK_FILE_DIRECTORY}/${BAK_LOG_FILE_NM}
# 백업 파일 저장
sudo mysqldump -u${MYSQL_HOST} -p${MYSQL_PASSWORD} -A > ${BAK_FILE_SAVE_PATH}/${BAK_FILE_DIRECTORY}/${BAK_FILE_NM}
# 백업 종료 로그 저장
echo `date +"%Y-%m-%d %H:%M:%S"`" <<< Database backup shell script end!>>>" >> ${BAK_FILE_SAVE_PATH}/${BAK_FILE_DIRECTORY}/${BAK_LOG_FILE_NM}
# 엔터
echo "" >> ${BAK_FILE_SAVE_PATH}/${BAK_FILE_DIRECTORY}/${BAK_LOG_FILE_NM}
echo done

# 4. S3에 파일 업로드
aws s3 cp ${BAK_FILE_SAVE_PATH}/${BAK_FILE_DIRECTORY}/${BAK_FILE_NM} $S3_SYNC_URL

# 5. 일주일 지나면 폴더 삭제
rm -rf $BAK_FILE_SAVE_PATH/$WEEK_AGO

4. AWS CLI로 백업파일 S3에 전송

  1. AWS IAM 사용자 생성

    • IAM 서비스를 사용하여 관리자 권한을 갖는 사용자 계정을 생성 (AdministratorAccess)
      -> AWS CLI를 사용해 AWS 서비스에 안전하게 액세스 가능
  2. EC2로 다시 접속 → aws configure

    • AWS CLI 설치되어있음을 가정
    • AWS IAM 사용자의 액세스 키 생성하여 Access Key& Secret Access Key 입력
  3. 다시 shell script의 db_backup.sh 파일 열고, S3 버킷 url과 보낼 파일 경로 적어 업로드(위에 적혀있음)

5. 스케줄링 → 주기적으로 만든 쉘스크립트 실행할수 있도록 crontab 설정

crontab -e

# 열리는 파일에 아래와 같이 붙여넣기
# 분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)
0 2 * * * /data/mysql_backup/shell_script/db_backup.sh # Run Daily 2AM

만약 현재 크론탭에 어떤 내용이 들어있는지 보려면 crontab -l 확인하기!!

0개의 댓글