如何在谷歌存储中导出云SQL数据库的备份?



>我有一个GAE项目,为了存储我使用Cloud SQL数据库的数据。 我需要对我的Cloud SQL数据库进行按需备份,备份应该存储在谷歌存储中。

谁能帮助我如何使用 JAVA 以编程方式执行此操作?

您无法导出备份(按需或自动(,如此处所述。但是,您可以做的是将数据导出到 SQL 转储文件或 CSV 文件,具体取决于您的用例,并将其存储在 Cloud Storage 上。

没有用于执行导出的 Java 实用程序,但 Google 会公开一个 API 端点供您触发导出。下面是使用标准卷曲工具的示例请求:

curl --header "Authorization: Bearer ${ACCESS_TOKEN}" 
     --header 'Content-Type: application/json' 
     --data '{"exportContext":
                {"fileType": "SQL",
                 "uri": "gs://<BUCKET_NAME>/<PATH_TO_DUMP_FILE>",
                 "databases": ["<DATABASE_NAME1>", "<DATABASE_NAME2>"] }}' 
   -X POST 
   https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/export

您将在此处的文档中找到有关导出数据的更多详细信息。

虽然LundinCast的答案仍然是正确的,并且提供了有用的信息,但它在某种程度上已经过时了。

引入新的 Java 实用程序

Google现在为它提供了一个Java实用程序,可以在这里找到:https://cloud.google.com/sql/docs/mysql/admin-api/rest/v1beta4/instances/export

在我看来,那里给出的示例代码缺少有关如何设置请求正文的最小代码。所以我在这里提供了一个简单的片段:

var exportContext = new ExportContext();
// gs:// stands for the gsutil tool, the filename should have "gz" as file extension
exportContext.setUri("gs://<BUCKET_NAME>/<BACKUP_FILENAME.gz>");     exportContext.setDatabases(List.of("<DATABASE_NAME>"));
exportContext.setFileType("SQL");
var requestBody = new InstancesExportRequest();
requestBody.setExportContext(exportContext);

必要的权限和自动化

Java 实用程序可能无法开箱即用,因为您需要正确设置某些权限/角色。完整的配方(也包括自动化,例如每天(可以在这里找到:https://cloud.google.com/architecture/scheduling-cloud-sql-database-exports-using-cloud-scheduler 。不幸的是(截至 2022 年 4 月 21 日(,Python 脚本已经过时(并且还缺少其他语言的示例(。使用我的答案中给出的第一个链接来查看较新的实现。

通过 gcloud 预先测试

要测试导出步骤,首先通过gcloud进行测试甚至可能会有所帮助:

gcloud sql export sql <CLOUD_SQL_INSTANCE> gs://<BUCKET_NAME>/<BACKUP_FILENAME>.gz --database=<DATABASE_NAME>

(您可能需要先通过gcloud config set project <PROJECT_NAME>设置项目(

相关内容

  • 没有找到相关文章

最新更新