我创建了一个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文档中,没有关于它的任何条目。有没有人有这个错误?
非常感谢任何帮助。
谢谢!
答案 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所述。