>我有一个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>
设置项目(