ERROR: (gcloud.sql.export.sql) HTTPError 409: Operation failed because another operation was already in progress

ERROR: (gcloud.sql.export.sql) HTTPError 409: Operation failed because another operation was already in progress

运行 sql 通过 jenkins 导出(备份),我定期收到 “错误:(gcloud.sql.export.sql)HTTPError 409:操作失败,因为另一个操作已经在进行中。错误:(gcloud.sql.operations.wait)参数操作 [OPERATION ...]:必须指定。

我正在尝试确定我在哪里可以看到导致此失败的作业

我尝试将 gcloud sql 操作等待 --timeout 延长至 1600 运气不好

gcloud sql 操作等待 --timeout=1600

此处有 2 个错误可能会影响您。第一个是在前一个完成之前有一个管理操作开始。通读 SQL 上的“最佳实践”文档将在这方面对您有所帮助: https://cloud.google.com/sql/docs/mysql/best-practices#admin 具体来说,在“操作”选项卡中,您可以看到 运行.

的操作

最后,命令“gcloud sql operations wait --timeout=1600”中缺少 [OPERATION] 参数。请在此处查看有关该命令的文档:https://cloud.google.com/sdk/gcloud/reference/sql/operations/wait

OPERATION 是 运行 操作的名称,如果您希望列出所有实例操作以获得正确的名称,您可以使用此命令: https://cloud.google.com/sdk/gcloud/reference/sql/operations/list.

操作名称是 36 个字符的十六进制字符串,因此您的命令应如下所示:
“gcloud sql 操作等待操作 aaaaaaaa-0000-0000-0000-000000000000 --timeout=1600”

干杯

如@PYB所说,要等待一个操作,需要指定操作的ID。以下是如何以编程方式执行此操作,就像在 Jenkins 脚本中一样:

$ gcloud sql operations list --instance=$DB_INSTANCE_NAME --filter='NOT status:done' --format='value(name)' | xargs -r gcloud sql operations wait
$ gcloud sql ... # whatever you need to do

我在长时间 运行 导入过程中遇到了同样的问题:

gcloud sql import sql "mycompany-mysql-1" $DB_BACKUP_PATH --database=$DB_NAME -q

这是否真的意味着如果导入运行一个小时,我将无法创建数据库 在那段时间内?真的吗???

gcloud sql databases create $DB_NAME --instance="mycompany-mysql-1", -i "mycompany-mysql-1" --async "

如果你在CI/CD里面使用GCloud,这是个大问题!谁有简单的解决方案?

到目前为止我的想法:

  1. 从云存储桶
  2. 下载备份到CI/CD
  3. 通过 CLI 连接到 MySQL 并以这种方式导入转储

但这意味着每当 CI/CD 中的两个任务想要同时执行多个任务时,一个任务将失败或者我必须等待。很伤心,如果我没记错的话。