728x90
반응형
# 오늘날짜로 Postgresql 덤프파일 생성하기
1. 금일 날짜 얻어오는 방법은 아래와 같다.
today=$(date "+%Y%m%d")
echo "sample_${today}.txt"
> 결과
$ sample_20201031.txt
- 오늘 날짜와 시간 구하는 스크립트
echo “오늘시간”
time=`date +%Y-%m-%d” “%H:%M:%S`
echo $time
2. Postgre dump 파일 생성
- 아래의 명령어로 생성 시 권한 오류가 발생 할 수 있다.
pg_dump -U postgres test_db > db_backup.sql
- 권한 오류 해결
pg_dump wikijs > ~/db_backup_wikijs.sql
cd ~
~의 경로는 /var/lib/postgresql 이다.
- 적용
echo “오늘시간”
time=`date +%Y-%m-%d” “%H:%M:%S`
echo $time
pg_dump -U postgres test_db > ~/db_backup_${time}.sql
- 덤프 파일을 S3에 업로그 해야하므로 아래 명령어를 통해 새로운 폴더를 생성한다.
mkdir transfer-to-s3
- 최종 스크립트는 아래와 같다.
echo "Postgresql DB Backup Start!!"
echo "################################################"
echo “오늘시간”
time=$(date +"%Y%m%d-:%H:%M:%S")
echo "현재 시간은 아래와 같다."
echo $time
echo "pg_dump를 활용하여 DB를 백업 합니다."
echo "저장 경로는 :: /var/lib/postgresql/backup_script 입니다. "
pg_dump db_name > ~/db_backup_${time}.sql
echo "AWS S3로 백업"
sleep 3
pg_dump db_name > ~/transfer-to-s3/db_backup_s3.sql
echo "DB 백업을 완료 하였습니다."
3. Crontab을 활용한 스케줄링
- 매일 23시 30분에 실행하도록 스케줄링 하기
- 기본 명령어는 아래와 같다.
30 23 * * * <SHELL_PATH>
분 시 일 월 요일 쉘스크립트경로
- 예시는 아래와같다.
* * * * * | 매일 1분마다 실행 |
5 * * * * | 매일 매시간 05분에 실행 (1시간 간격으로 실행) |
*/5 * * * * | 매일 5분마다 실행 |
*/10 * * * * | 매일 10분마다 실행 |
0,10,20,30,40,50 * * * * | 매일 10분마다 실행 |
0 18 * * * | 매일 18시 00분에 실행 |
45 22 * * * | 매일 22시 45분에 실행 |
28 03 * * * | 매일 03시 28분에 실행 |
* 1 * * * | 매일 01시 00분 ~ 01시 59분 사이에 1분 간격으로 실행 |
0 */1 * * * | 매일 1시간 간격으로 실행 (매시간 00분) |
0 */12 * * * | 매일 12시간마다 실행 |
0 6,12 * * * | 매일 06시, 12시에 실행 |
10 2-5 * * * | 매일 02시 ~ 05시 사이 매시간 10분에 실행 (02시 10분, 03시 10분, 04시 10분, 05시 10분) |
5 8-20/3 * * * | 매일 08시 ~ 20시 사이 3시간 간격으로 05분에 실행 (08시 05분, 11시 05분, 14시 05분, 17시 05분, 20시 05분) |
42 4 10 * * | 매달 10일 04시 42분에 실행 |
30 5 1,15 * * | 매달 1일과 15일 05시 30분에 실행 |
0-10 17 1 * * | 매달 1일 17시 00분 ~ 17시 10분까지 1분 단위로 실행 |
0 17 * * 1 | 매주 월요일 17시 00분에 실행 |
0,10 17 * * 0,2,3 | 매주 일, 화, 수요일 17시 00분과 17시 10분에 실행 |
0 0 1,15 * 1 | 매달 1일과 15일 그리고 월요일 24시 00분에 실행 |
0 6,12 * * 0,3 | 수, 일요일마다 06시, 12시에 실행 |
0 21 * * 1-6 | 월 ~ 토 21시 00분에 실행 |
- crontab -e 명령어로 작성하기
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
30 23 * * * /postgresql/backup_script/backup_script.sh
- 파이썬 boto3 라이브러리 설치하기
# pip 설치
sudo apt install python3-pip
# boto3 라이브러리 설치
pip install boto3
- 이제 python3 명령어로 python 확장자를 실행 할 수 있다.
4. python을 활용하여 dump 파일을 S3에 업로드 하기
- IAM 권한 부여하기 s3:PutBucketPolicy 권한을 부여한다.
정책 생성기를 클릭하여 원하는 정책을 생성한다.\
- 생성된 정책 예제는 아래와 같다.
{
"Version": "2012-10-17",
"Id": "Policy11111111111111",
"Statement": [
{
"Sid": "Stmt11111111111111",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::11111111111111:user/test"
},
"Action": "s3:PutBucketPolicy",
"Resource": "arn:aws:s3:::db-backup-s3"
}
]
}
- S3 버킷을 생성 후 아래의 권한을 부여한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
- 코드작성
import boto3
AWS_ACCESS_KEY_ID = "AAAAAAAAAAAAAAAA"
AWS_SECRET_ACCESS_KEY = "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"
AWS_DEFAULT_REGION = "ap-northeast-2"
client = boto3.client('s3',
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
region_name=AWS_DEFAULT_REGION
)
file_name = 'db_backup_s3.sql'
bucket = 'db-backup-s3'
key = 'db_backup_s3.sql'
client.upload_file(file_name, bucket, key)
- 최종코드는 아래와 같다.
import boto3
import os
from datetime import datetime
current_time = datetime.now()
print(current_time)
AWS_ACCESS_KEY_ID = "1111111111111111111111111111"
AWS_SECRET_ACCESS_KEY = "11111111111111111111111111111111111111111"
AWS_DEFAULT_REGION = "ap-northeast-2"
client = boto3.client('s3',
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
region_name=AWS_DEFAULT_REGION
)
file_name = 'db_backup_s3.sql'
bucket = 'db-backup-s3'
key = 'db_backup_s3.sql'
file_old_name = 'db_backup_s3.sql'
file_new_name = file_name + str(current_time)
os.rename(file_old_name, file_new_name)
print(file_new_name)
#upload_name = file_name + str(current_time)
client.upload_file(file_new_name, bucket, file_new_name)
- 실행
python3 transfer-to-s3.py
- 결과, 정상 업로드 확인
5. transfer-to-s3.py 파일을 crontab에 등록하기
- 위에 쉘에서 dump 파일을 23시30분에 생성한다.
s3로 업로드는 23시45분에 하도록 크론탭을 만든다.
45 23 * * * /postgresql/transfer-to-s3/transfer-to-s3.py
- crontab의 최종 코드는 아래와 같다.
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
30 23 * * * /postgresql/backup_script/backup_script.sh
45 23 * * * /postgresql/transfer-to-s3/transfer-to-s3.py
6 결론
- 이제 매일 23시30분에 postgresql dump 파일이 생성되고 23시45분에 생성된 dumpfile이 s3버킷에 자동으로 업로드 된다.
728x90
반응형
'쉘스크립트 > 💻 간단한 프로그래밍' 카테고리의 다른 글
Docker Container를 자동으로 종료 및 삭제 후 재 시작하는 스크립트 (0) | 2022.10.21 |
---|