检索自动化的Google Cloud SQL备份

13

我们的团队有一个需求:能够检索我们在Google Cloud SQL上托管的数据库备份,并将该数据库恢复到本地托管的MySQL实例中。

我知道Google Cloud SQL有安排备份的功能,但这些备份似乎无法在任何地方下载。

我也知道我们可以将数据库“导出”到Google Cloud Storage,但我们希望能够安排“导出”操作。

最终目标是在某种管理脚本中执行以下步骤:

  1. 自动备份我们在Google Cloud SQL上托管的数据库。
  2. 将备份下载到本地(而非云)服务器。
  3. 将备份恢复到本地的MySQL实例中。

有任何想法吗?


2
3年后,jmwicks给出了正确的答案。 - timc
5个回答

13

现在,gcloud sdk命令提供导入/导出功能:

gcloud sql export sql <DATABASE_INSTANCE> \
    gs://<CLOUD_STORAGE_BUCKET>/cloudsql/export.sql.gz \
    --database <DATABASE_NAME>

可以使用gsutil下载此导出文件。也可以使用mysqlimport进行导入。


1
您还需要授予 SQL 实例的服务帐户(gcloud sql instances describe <instance-name> | grep -i account)“Storage Object Creator”权限,以便它可以在存储桶中创建转储文件。 - quickshiftin
3
该命令已过时,将在205.0.0版本中删除。请改用gcloud sql export sql命令。 - riotera

6
这是我遇到的问题,我的解决方案是:
  1. 进入IAM服务账号管理
  2. 创建一个新的服务账号(我称之为sql-backuper),下载它的JSON访问密钥
  3. 在主IAM页面上授予它查看者、存储对象创建者角色(目前GCloud没有单独的只读SQL角色)
  4. 在将要进行备份的机器上设置它: gcloud auth activate-service-account sql-backuper@project-name-123.iam.gserviceaccount.com --key-file /home/backuper/gcloud-service-account.json (gcloud身份验证文档)
  5. GCloud存储浏览器中创建一个新的存储桶
  6. 现在在备份机器上可以运行:gcloud sql instances export [sql-instance-name] gs://[bucket-name]/[file-name].gz --database [your-db-name] (gcloud SQL文档) 和 gsutil cp gs://[bucket-name]/[file-name].gz [local-file-name].gz (gsutil cp文档)
  7. 你现在拥有一个本地的数据库副本,可以随意使用

这应该是被接受的答案,因为它涵盖了所有要求。 - gries

3
注意,您现在可以使用Cloud SQL REST API触发“导出”操作。因此,您的管理脚本可以执行此操作,然后从Cloud Storage下载备份(但需要等待导出操作完成)。

2
如果您想要下载备份(手动或自动),您可以启动另一个 CloudSQL 实例,然后执行以下步骤:
  1. 从备份实例中单击备份选项(还原)
  2. 选择在先前启动的实例上进行还原
  3. 从新恢复的 CloudSQL 导出数据
  4. 在 Cloud Storage 上获取 .sql 或 .csv 文件

2

很抱歉,当前Cloud SQL没有此功能。我们希望未来能够更加便捷地实现它。同时,您可以使用Selenium(或其他UI脚本框架)与cron作业组合使用。


我已经将此标记为答案,因为它就是答案。但这似乎是一个相当大的功能漏洞。 - Tombatron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接