您能将 MySQL 转储文件从 S3 存储桶恢复到 RDS 实例吗?

您能将 MySQL 转储文件从 S3 存储桶恢复到 RDS 实例吗?

我正在研究将常规 MySQL 转储运行到 S3 存储桶作为灾难恢复策略的一部分(部分原因是当前入站数据传输成本为零!)。如果发生灾难,我希望将转储文件从 S3 恢复到新的 RDS 实例。尽管进行了广泛的搜索,但我找不到任何此类示例。有人知道这是否可行吗?

简单介绍一下,这是一个 500GB 的 24x7 MySQL 数据库,写入密集,读取稀少。我计划使用 MySQL 复制到从属服务器,这样当主机发生故障时,我们可以从该服务器获取转储并发送到 S3(尽管复制主服务器和从属服务器位于不同的数据中心,但我们使用同一个托管提供商)。

答案1

您可以使用AWS CLI 工具以及 CLI 上的 STDIN(“-”):

mysql -u db_user -ppassword database_name < aws s3 cp s3://mysqldump_bucket_name/mysqldump.sql -

-该命令的一部分将aws s3 cp输出通过管道传输到 STDOUT,由 mysql 读取。

答案2

目前 RDS 中没有这样的功能,具体说明如下:

https://forums.aws.amazon.com/message.jspa?messageID=213853

但AWS 人员建议采用以下程序:

http://aws.amazon.com/articles/2933

答案3

当我尝试将我的机器上运行的 mysql 服务器备份到 RDS mysql 时,它对我有用。(我的机器运行的是 Windows,但它也适用于 Linux mysql dump)

mysqldump -u root -p --databases 'mydatabase' > dump.sql

然后,只需上传到 RDS 实例:

mysql -h myrds.com -u myuser -p < dump.sql

答案4

我这样做的方法是运行 Fargate 任务。

使用包含管道语句的 shell 脚本创建 Docker 容器:

aws s3 cp $DATA_LOCATION - | mysql --host=$MYSQL_HOST --user=$MYSQL_USER --password=$MYSQL_PASS --database=$database

将其上传到 AWS 可以访问的地方(例如 ECR)。

然后创建一个集群(如果您还没有集群的话)和一个运行容器的任务定义,该容器具有可以查看 S3 存储桶的角色。还要组合一个可以查看 RDS 实例的网络配置。(我在 Pulumi 而不是 AWS CLI 中完成了所有这些操作,因此本节中没有示例。)

然后将所有这些放在一起并通过以下调用运行任务:

aws ecs run-task --task-definition=$TASK_ARN --cluster=$CLUSTER_ARN --network-configuration=$TASK_NETWORK --launch-type="FARGATE"

然后清理集群、任务定义和角色(如果必须创建)。

相关内容