将AWS RDS手动快照(postgres)移动/复制到AWS s3存储桶

时间:2019-01-17 19:15:23

标签: amazon-web-services amazon-s3 amazon-rds

如何将AWS RDS手动快照保存在s3存储桶(在同一帐户中)上? Aws是否会为自动RDS快照收费?

你们对此有解决方案吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

  

我们如何将AWS RDS手动快照保存在s3存储桶中   帐户)?

您不能。 AWS不提供对快照原始数据的访问。

  

Aws是否会为自动RDS快照收费?

是的,AWS为快照使用的存储空间收费。

答案 1 :(得分:0)

只能通过RDS控制台/ CLI访问RDS快照。

如果要将数据导出到自己的S3存储桶,则需要直接从数据库实例中获取该信息。像mysqldump之类的东西

如果您使用自动快照,则AWS将向您收费。

这是我过去用来将MySQL / Aurora RDS备份到S3存储桶的脚本:

#!/usr/bin/env bash

set -o errexit
set -o pipefail
set -o nounset

function log {
  echo "[`date '+%Y-%m-%d %H:%M:%S.%N'`] $1"
}

: ${MYSQL_USER:=root}
: ${MYSQL_PASS:=root}
: ${MYSQL_HOST:=127.0.0.1}
: ${MYSQL_PORT:=3306}

if [ -z "${AWS_S3_BUCKET-}" ]; then
    log "The AWS_S3_BUCKET variable is empty or not set"
    exit 1;
fi;

EXCLUDED_DATABASES=(Database information_schema mysql performance_schema sys tmp innodb)

YEAR=$(date '+%Y')
MONTH=$(date '+%m')
DAY=$(date '+%d')
TIME=$(date '+%H-%M-%S')

if [ -z "${MYSQL_DATABASE-}" ]; then
    DATABASES=$(/usr/bin/mysql --host="$MYSQL_HOST" --port="$MYSQL_PORT" --user="$MYSQL_USER" --password="$MYSQL_PASS" -e "SHOW DATABASES;" | cut -d ' ' -f 1)
else
    DATABASES=("$MYSQL_DATABASE")
fi;

for DATABASE in $DATABASES; do

  for EXCLUDED in ${EXCLUDED_DATABASES[@]}; do
    if [ "$DATABASE" == "$EXCLUDED" ]; then
      log "Excluded mysqlbackup of $DATABASE"
      continue 2
    fi;
  done

  log "Starting mysqlbackup of $DATABASE"

  AWS_S3_PATH="s3://$AWS_S3_BUCKET/path-to-folder/$DATABASE.sql.gz"

  mysqldump --host="$MYSQL_HOST" --port="$MYSQL_PORT" --user="$MYSQL_USER" --password="$MYSQL_PASS" "$DATABASE" | gzip | AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY aws s3 cp - "$AWS_S3_PATH"

  log "Completed mysqlbackup of $DATABASE to $AWS_S3_PATH"

done