Amazon web services 亚马逊RDS-仅在需要时在线?

Amazon web services 亚马逊RDS-仅在需要时在线?,amazon-web-services,amazon-rds,Amazon Web Services,Amazon Rds,我有一个关于亚马逊RDS的问题。我只需要一天大约2小时的在线数据库,但我正在处理一个大约1gb的大型数据库 我有两个主要问题: 我是否可以通过脚本自动使我的RDS数据库联机和脱机以节省资金 当我将RDS脱机以停止“工作时间”计数器运行并向我计费时,当我将其重新联机时,它是否仍具有相同的内容(即,我的所有数据是否都保留在那里,或者它是否必须是一个空白数据库?)。如果是这样的话,除了每次都备份到S3并重新导入它之外,还有什么方法可以解决这个问题吗 您可以使用shell脚本启动EC2*实例,因此我想您

我有一个关于亚马逊RDS的问题。我只需要一天大约2小时的在线数据库,但我正在处理一个大约1gb的大型数据库

我有两个主要问题:

  • 我是否可以通过脚本自动使我的RDS数据库联机和脱机以节省资金

  • 当我将RDS脱机以停止“工作时间”计数器运行并向我计费时,当我将其重新联机时,它是否仍具有相同的内容(即,我的所有数据是否都保留在那里,或者它是否必须是一个空白数据库?)。如果是这样的话,除了每次都备份到S3并重新导入它之外,还有什么方法可以解决这个问题吗


  • 您可以使用shell脚本启动EC2*实例,因此我想您也可以为RDS启动EC2*实例。 (见附件)

    但与EC2*不同的是,您不能在不“销毁”RDS实例的情况下“停止”RDS实例。终止数据库时,需要创建数据库快照。您将在重新启动数据库时使用此数据库快照


    *EC2:弹性计算,租用虚拟服务器或服务器

    如果您希望以编程方式执行此操作

  • 使用RDS create db Snapshot对RDS实例进行快照

  • 使用rds Delete db instance删除正在运行的实例

  • 使用rds Restore db instance from db snapshot从快照还原数据库


  • 如果希望手动执行,也可以从AWS Web控制台执行所有这些操作

    下面是一个脚本,用于停止/启动/重新启动RDS实例

    #!/bin/bash
    
    # usage ./startStop.sh lhdevices start
    
    INSTANCE="$1"
    ACTION="$2"
    
    
    
    # export vars to run RDS CLI
    export JAVA_HOME=/usr;
    export AWS_RDS_HOME=/home/mysql/RDSCli-1.15.001;
    export PATH=$PATH:/home/mysql/RDSCli-1.15.001/bin;
    export EC2_REGION=us-east-1;
    export AWS_CREDENTIAL_FILE=/home/mysql/RDSCli-1.15.001/keysLightaria.txt;
    
    if [ $# -ne 2 ]
    then
    echo "Usage: $0 {MySQL-Instance Name} {Action either start, stop or reboot}"
    echo ""
    exit 1
    fi
    
    
    shopt -s nocasematch
    
    if [[ $ACTION == 'start' ]]
    then
    echo "This will $ACTION a MySQL Instance"  
    rds-restore-db-instance-from-db-snapshot lhdevices 
    --db-snapshot-identifier        dbStart --availability-zone us-east-1a     
    --db-instance-class db.m1.small 
    
    echo "Sleeping while instance is created"
    sleep 10m
    echo "waking..."
    
    rds-modify-db-instance lhdevices --db-security-groups kfarrell
    
    echo "Sleeping while instance is modified for security group name"
    sleep 5m
    echo "waking..."
    
    elif [[ $ACTION == 'stop' ]]
    then
    echo "This will $ACTION a MySQL Instance" 
    
    yes | rds-delete-db-snapshot dbStart
    
    echo "Sleeping while deleting old snapshot "
    sleep 10m
    
    #rds-create-db-snapshot lhdevices --db-snapshot-identifier dbStart
    
    # echo "Sleeping while creating new snapshot "
    # sleep 10m
    # echo "waking...."
    
    #rds-delete-db-instance lhdevices --force --skip-final-snapshot 
    rds-delete-db-instance lhdevices --force --final-db-snapshot-identifier dbStart
    
    echo "Sleeping while instance is deleted"
    sleep 10m
    echo "waking...."
    
    elif [[ $ACTION == 'reboot' ]]
    then
    echo "This will $ACTION a MySQL Instance" 
    rds-reboot-db-instance lhdevices ;
    
    echo "Sleeping while Instance is rebooted"
    sleep 5m
    echo "waking...."
    
    else
    
    echo "Did not recognize command: $ACTION"
    echo "Usage: $0 {MySQL-Instance Name} {Action either start, stop or reboot}"
    
    fi
    shopt -u nocasematch
    

    Amazon最近更新了CLI,以包括启动和停止RDS实例的方法。并详细说明执行这些操作所需的步骤。

    如下所述,您可以快照/删除/还原到“启动/停止”RDS实例。我认为在EC2实例上安装mysql可能更容易,您可以根据需要启动和停止。亚马逊感到羞耻,截至2016年6月,还没有这样的功能快照是一个糟糕的选择。快照存储在S3上。因此,当您创建快照时,您将为存储付费。亚马逊非常聪明,它没有实施停止/启动功能,强迫你无论如何付费。从2016年6月起,可以创建
    db.t2.micro
    实例作为免费层用于测试。从2017年6月1日起,RDS支持大多数发动机类型的启动和停止实例。您可以通过控制台或CLI执行此操作。更多信息可以在中找到,这样他就可以将这些步骤编写到cron作业中?嗯……也许不是,因为他怎么能通过编程知道DB服务器的实例ID呢?RDS实例的实例ID是基于创建实例时的名称。这也是我的理解。所以他可以编写一个作业脚本,上面写着1)创建“i-75gh”的快照,然后2)杀死“i-75gh”……但他会将快照恢复到哪里?他必须手动运行流程的后半部分(创建新实例,记录id,将快照恢复到其中),不是吗?然后他必须用新id更新快照/kill脚本。必须有其他方法…数据库DBInstanceId是用户指定的。它没有被分配。您可能会想到EC2实例ID。来自RDS API上的AWS API文档:“DBInstanceId用户提供的数据库标识符;这是标识DB实例的唯一键”。DBInstanceId是传递到大多数AWS RDS API调用中以识别要与之交互的数据库的对象。我想到的是EC2实例ID——我使用的是Postgres,因此没有使用RDS的乐趣。请简要说明如何启用它!新闻稿可在此处找到:您可以: