如何从 Google Cloud SQL 调用 pg_dump

如何从 Google Cloud SQL 调用 pg_dump

我正在寻找一种解决方案来备份我的 Cloud SQL 模式(和 Cloud Storage 文件)。

起初我尝试使用 Cloud Scheduler 调用 googleapis (https://cloud.google.com/sql/docs/postgres/import-export/exporting) 以便导出数据库。问题是我需要特定的备份参数,并且需要导出 PostgreSQL 数据库中的特定模式。我的每个客户端都有一个模式,我希望能够恢复模式而不恢复整个数据库。Googleapis 似乎不支持导出特定模式(目前),这就是为什么我想直接调用 pg_dump。

在 Cloud SQL 中使用自动备份也存在同样的问题。我无法恢复数据库中的特定架构,而且我需要将备份保留至少一个月。

但是,我还没有找到使用 Cloud Functions 等调用 pg_dump 的方法。因此,目前我正在考虑使用自己的 Windows 10 笔记本电脑调用 pg_dump 并在 Windows 中设置日常任务。我更愿意使用 Google Cloud,而不是自己的笔记本电脑。

如果有人对我应该如何构建我的备份基础设施有任何想法,我将不胜感激。

答案1

使用代理连接您的 cloudsql 实例 >https://cloud.google.com/sql/docs/postgres/sql-proxy

那么这个命令应该可以完成这项工作

pg_dump -U postgres -h localhost -p [PORT] [DBNAME] -n public --format=p  >publicBackup.sql

psql -U postgres -h localhost -p [PORT] [DBNAME]  -c "drop schema public cascade;" 

psql -U postgres -h localhost -p [PORT] [DBNAME] -n public -1 -f  ./publicBackup.sql

您可以从任何与您的数据库有代理连接的容器执行此项工作。

答案2

正如您所提到的,文档说备份仅适用于实例和数据库,而不适用于特定架构。这里没有什么新东西。

我知道这可能不是最好的选择,但由于这些限制,您是否考虑过更新/更改您的设计?每个客户端一个数据库,这样备份就不会成为麻烦。至少在他们发布一些备份或导出单个模式之前。

您的账单不会受到影响,因为他们收取的是存储费用,而不是数据库或架构费用。但是,这可能比您预期的还要花费更多时间。

答案3

您可以创建一个 pgSQL 函数并将其作为来自 Cloud Functions 的查询触发。在 pgSQL 中,您可以执行 pg_dump

相关内容