我正在研究将常规 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 人员建议采用以下程序:
答案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"
然后清理集群、任务定义和角色(如果必须创建)。