尝试删除Google Cloud SQL postgres数据库的未知INTERNAL_ERROR

时间:2018-02-15 17:37:08

标签: postgresql google-cloud-sql

我创建了一个Google SQL实例和一些数据库。我需要删除一个数据库,但出于某种原因,目前我收到一个未知错误。

这是调试输出:

$ gcloud sql databases delete myDatabase -i myInstance --verbosity debug

DEBUG: Running [gcloud.sql.databases.delete] with arguments: [--
instance: "myInstance", --verbosity: "debug", DATABASE: "myDatabase"]
The database will be deleted. Any data stored in the database will be
destroyed. You cannot undo this action.

Do you want to continue (Y/n)?

Deleting Cloud SQL database...failed.
DEBUG: (gcloud.sql.databases.delete) INTERNAL_ERROR
Traceback (most recent call last):
  File "~/google-cloud-sdk/lib/googlecloudsdk/calliope/cli.py", line 797, in Execute
    resources = calliope_command.Run(cli=self, args=args)
  File "~/google-cloud-sdk/lib/googlecloudsdk/calliope/backend.py", line 757, in Run
    resources = command_instance.Run(args)
  File "~/google-cloud-sdk/lib/surface/sql/databases/delete.py", line 84, in Run
    'Deleting Cloud SQL database')
  File "~/google-cloud-sdk/lib/googlecloudsdk/api_lib/sql/operations.py", line 81, in WaitForOperation
    sleep_ms=_BaseOperations._INITIAL_SLEEP_MS)
  File "~/google-cloud-sdk/lib/googlecloudsdk/core/util/retry.py", line 226, in RetryOnResult
    if not should_retry(result, state):
  File "~/google-cloud-sdk/lib/googlecloudsdk/api_lib/sql/operations.py", line 65, in ShouldRetryFunc
    raise result
OperationError: INTERNAL_ERROR
ERROR: (gcloud.sql.databases.delete) INTERNAL_ERROR

在Google文档中,没有关于它的任何条目。有没有人有这个错误?

非常感谢任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:1)

我的预感是数据库仍然有打开的连接,阻止你删除它。

我认为这个问题在postgres数据库中比在MySQL数据库中更常见,因为有了postgres,更有可能是滞后连接(这是一个postgres问题,而不是GCP问题)。

要对此进行测试,请连接到Cloud SQL实例的shell并运行以下命令,以防止将来与数据库的任何连接:

REVOKE CONNECT ON DATABASE DATABASE_NAME FROM public; 

然后,连接到您要删除的数据库,并通过发出以下命令终止与当前数据库之外的所有连接:

SELECT pid, pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = current_database() AND pid <> pg_backend_pid(); 

退出postgres shell。

我还建议禁用自动备份。如果正在进行自动备份,如果您同时尝试删除数据库,则会产生异常。

现在再次尝试gcloud sql databases delete命令。

答案 1 :(得分:0)

我有同样的问题。 我的问题是数据库不属于postgres用户。

为了能够使用数据库所有者用户连接到数据库,需要在cloud sql的“数据库”选项卡中创建数据库。像您的用户名一样命名数据库。 然后,您应该可以登录:

gcloud sql connect <instance name> --user=<owner of database> --quiet

现在执行

DROP DATABASE <database name>;

如果成功,应回复: 删除数据库

答案 2 :(得分:0)

我在删除GCP中的云SQL上的MysQL数据库时遇到了同样的问题。事实证明,在删除数据库之前,我需要先禁用数据库的某些配置,如here所述。