반응형
EC2 내부에 데이터 베이스를 자동 백업해야 한다.
비용문제상 EC2 내부에 데이터베이스를 구축 할 수 밖에 없었는데, 해당 내용을 자동 백업 후 S3에 업로드를 해야 한다.
EC2 특성상 언제 잘못 될 지 모르기 때문에 주기적으로 백업을 해두지 않는 이상 복구를 할 수 있는 방법이 없다.
AWS CLI를 이용하여 주기적으로 백업된 데이터를 S3에 업로드 하고, 기간이 어느정도 지난 백업 데이터를 삭제하는 과정까지 구축 했다.
양 프로젝트에서 공통적으로 사용되는 거라서, 타이틀은 그냥 프로그래밍 일지로 두었다.
AWS CLI 설치
1. curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
2. unzip awscliv2.zip
3. sudo ./aws/install
4. aws --version
5. aws configure
위 순서대로 입력해서 ubuntu 에서 aws cli를 사용 할 수 있게끔 설정하고
기존에 발급받은 IAM 키 값을 aws configure에 넣어 준다.
4번 단계에서 잘 설치 되었는지 확인이 가능 하다.
IAM 키값 발급에 관한건
해당 포스트에 정리 해 두었다.
자동 백업 및 자동 업로드 & 기간 지난 파일 자동 삭제 스크립트 작성
folder_name=$(date +%Y%m%d)
mkdir -p /home/ubuntu/db/mysql/$folder_name
# mysql 백업
mysqldump -uroot arknights_info > /home/ubuntu/db/mysql/$folder_name/backup.sql
mkdir -p /home/ubuntu/db/mongodb/$folder_name
# mongodb 백업
mongodump -d arknights_info -o /home/ubuntu/db/mongodb/$folder_name
# 기간 지난 파일 삭제
find /home/ubuntu/db/mysql -mtime +6 -delete
find /home/ubuntu/db/mongodb -mtime +6 -delete
# 백업 데이터 업로드
aws s3 cp /home/ubuntu/db s3://[bucket-name]/db --recursive
# S3상에 올라갔는데, 5일 이상 지난 데이터 삭제
today=$(date +%Y%m%d)
remove_date=$(date -d "$today - 5 days" +%Y%m%d)
remove_time_stamp=$(date -d "$remove_date" +%s)
file_list=$(aws s3 ls s3://[s3-bucket-name]/backup_db --recursive)
while read -r line; do
file_date=$(echo "$line" | awk '{print $1}')
file_path=$(echo "$line" | awk '{print $4}')
target_time_stamp=$(date -d "$file_date" +%s)
if [ $remove_time_stamp -gt $target_time_stamp ]; then
aws s3 rm s3://[s3-bucket-name]/"$file_path"
fi
done <<< "$file_list"
위와 같은 sh를 작성해 주었다.
aws s3의 --recursive 옵션은 하위 폴더/파일까지 전부 확인한다는 의미 정도로 생각하면 된다.
추가적으로 cron에 하루마다 돌아가도록 설정 해 주었다.
0 5 * * * /home/ubuntu/dbbackup.sh
마지막으로 잘 업로드 되었는지 확인
정상적으로 백업되는 것 까지 확인 했다.
반응형
'프로그래밍 일지' 카테고리의 다른 글
[AWS CloudFormation] EC2 생성 및 탄력적 IP 자동 부여Infra (0) | 2023.06.20 |
---|---|
인프라 구조 변경 전, 내용 정리 (0) | 2023.06.09 |