对于一些测试和开发工作,我们希望能够定期克隆现有的 RedShift 数据库(所有模式和所有数据)。类似于备份恢复的东西。
我能找到的最好的方法是从创建整个集群的快照开始,这在此时是不切实际的。
我们确实有用于创建数据库和架构的脚本,但我们没有用于从另一个 AWS RedShfit 数据库填充表的简单/整洁的机制。 (我们发现不能使用INSERT INTO db_new.schema.table SELECT * FROM db_old.schema.table
,因为不支持跨数据库语法)
有没有人有什么建议?
您可以执行以下操作:
UNLOAD
您的数据到 S3 ( http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html )COPY
将数据导入新数据库 ( http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html )对于开发大小的数据集,此(卸载/复制)将相当快。
我只是花了很多时间做这件事。这是有问题的,因为 postgres 工具没有捕获 sort 和 dist 键信息。稍后我会将完整的脚本发布到我们的公共 github 存储库,但现在这里有一个脚本,它将所有表定义拉入创建表语句。它还没有解决列压缩类型或主键,但它至少允许我们在另一个数据库中重新创建表。填充它们是一个简单的脚本卸载和加载语句的问题。由于 Redshift sql 的许多限制,该脚本并不漂亮,我花了太多时间查看它,但它运行良好。
我喜欢将数据库状态捕获为代码的想法,但我认为在备份快照的红移上下文中存在一种更简单的方法并从中恢复。
这个用于将数据库复制到另一个 AWS 账户的 AWS 文档是一个指南,您可以在账户中执行相同的操作,或者在从快照进行紧急恢复时执行此操作。
现在您的模式和数据已经存在,下一个任务是将这个数据库缩小为测试环境并调整集群的大小。还有 dns 端点和其他配置要清理,在文档中提到。
瘦身步骤是感兴趣的部分,也许其他人会对此发表评论。