我正在寻找一种解决方案来备份我的 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