[VPS] mongodb 및 postgresql dbs를 S3 Object Storage에 백업하는 방법
모든 백업은 7z로 암호화되며 만료 시간이 있습니다.
전제 조건
p7zip-full,curl, mongodb-tools, postgresql-client
몽고DB 백업
mongodump
도구의 도움으로 전체 컬렉션을 쉽게 다운로드하고 압축한 다음 stdout을 7z로 파이핑하고 암호로 db를 암호화할 수 있습니다.mongodump \
--uri="${db_host}/${db_name}?authSource=admin" \
--archive \
--gzip \
| 7z a -si -t7z -p${password} ${file_name}
db_host
> mongodb에 연결하기 위한 uridb_name
> 백업할 컬렉션의 이름password
> 7z 파일을 암호화(복호화도 포함)하는 데 사용되는 암호file_name
> 출력 파일(*.7z 확장자일 수 있음)PostgreSQL 백업
pg_dump
도구의 도움으로 전체 db를 쉽게 다운로드하고 압축한 다음 stdout을 7z로 파이핑하고 db를 암호로 암호화할 수 있습니다.pg_dump \
--dbname=${db_host}/${db_name} \
| 7z a -si -t7z -p${password} ${file_name}
db_host
> psql에 연결하기 위한 uridb_name
> 백업할 db명password
> 7z 파일을 암호화(복호화도 포함)하는 데 사용되는 암호file_name
> 출력 파일(*.7z 확장자일 수 있음)S3 호환 서비스에 업로드
이제 압축 및 암호화된 파일을 S3 스토리지로 보낼 준비가 되었습니다.
curl
를 사용하여 이를 달성할 수 있습니다. 이것은 ${file_name}을 본문으로 사용하는 PUT 요청의 예입니다.curl -i ${bucket}/${file_name} \
-X PUT \
--data-binary "@${file_name}" \
-H "Content-Type: application/x-7z-compressed" \
-H "X-Auth-Token: ${token}" \
-H "X-delete-after: ${delete_after}"
in this example I've used OVH Object Storage
bucket
> 버킷에 대한 완전한 urifile_name
> 업로드된 파일을 저장할 파일 이름token
> OVH를 사용하여 요청을 인증하기 위해 X-Auth-Token 헤더를 추가해야 합니다.delete_after
> 이것은 선택적 헤더입니다. 일정 시간이 지나면 파일을 삭제할 수 있습니다.오토메이션
이 3가지 명령은 백업 스크립트의 핵심입니다. 이제 일부 bash 논리로 래핑하고 파일에 모두 넣을 수 있습니다.
#!/bin/bash
# pass args to script
if [ $# -eq 0 ]; then
echo "Missing args: db_name or delete_after"
exit 1
fi
while [ $# -gt 0 ]; do
case "$1" in
--db_name=*)
db_name="${1#*=}"
;;
--delete_after=*)
delete_after="${1#*=}"
;;
*)
printf "***************************\n"
printf "* Error: Invalid argument.*\n"
printf "***************************\n"
exit 1
esac
shift
done
if [ -z "${delete_after}" ]; then
delete_after=`expr 60 \* 60 \* 24 \* 30`; # one month
fi
# db env
db_host=mongodb://user:password@host:port
#db_name=db_name
file_name=${db_name}_$(date +%d-%m-%Y_%H-%M-%S).gzip.7z;
#ovh env
bucket=bucket_url;
token=personal_token;
password=password;
# Create a crypted backup
if mongodump \
--uri="${db_host}/${db_name}?authSource=admin" \
--archive \
--gzip \
| 7z a -si -t7z -p${password} ${file_name}; then
echo 'mongodb dump created'
else
echo 'mongodump return non-zero code'
exit 1;
fi
content_length=$(cat $file_name | wc -c);
# send file to ovh switf
http_response=$(curl -i ${bucket}/${file_name} \
-X PUT \
--data-binary "@${file_name}" \
-H "Content-Type: application/x-7z-compressed" \
-H "Content-Length: ${content_length}" \
-H "X-Auth-Token: ${token}" \
-H "X-delete-after: ${delete_after}" \
| head -n 1 | cut -d \ -f2);
if [ $http_response = 201 ] || [ $http_response = 100 ]; then
echo "complete";
rm ${file_name};
else
echo "error sending file to ovh";
fi
이 파일은 두 개의 인수를 허용합니다.
db_name
> 필수, 백업할 컬렉션/db의 이름delete_after
> 선택 사항, 몇 초 후에 파일을 삭제해야 함example of how to manually execute
bash script_name.sh --db_name=db_to_backup
크론
crontab을 사용하면 백업을 실행할 시기를 예약할 수 있습니다.
add this row to
crontab -e
file to run the script every night at 2:00am and save the result tobackup_script.logs
0 2 * * * ~/script_name.sh >> ~/backup_script.logs 2>&1
Reference
이 문제에 관하여([VPS] mongodb 및 postgresql dbs를 S3 Object Storage에 백업하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/roman991/vps-how-to-backup-mongodb-and-postgresql-dbs-to-s3-object-storage-35e8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)