创建和管理数据库
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
本页面介绍如何在 Cloud SQL 实例上创建、列出和删除 SQL Server 数据库。
新创建的实例具有一个 sqlserver 数据库。
如需详细了解如何创建 SQL Server 数据库及其相关主题,请参阅
SQL Server 文档 。
如需了解如何为用于实例中数据库的排序规则 类型设置默认值,请参阅创建实例 。
准备工作
在完成本页面上的任务之前,必须先执行以下操作:
创建一个 Cloud SQL 实例。如需了解详情,请参阅创建实例 。
如果您计划通过 sqlcmd 客户端创建或管理数据库,则必须执行以下操作:
配置访问权限并通过 sqlcmd 客户端连接到该实例。
在 Cloud SQL 实例上创建数据库
注意 :数据库名称的长度上限为 128 个字符。如需详细了解此名称的其他条件,请参阅数据库标识符 。
控制台
在 Google Cloud 控制台中,前往 Cloud SQL 实例 页面。
转到“Cloud SQL 实例”
如需打开实例的概览 页面,请点击实例名称。
从 SQL 导航菜单中选择数据库 。
点击创建数据库 。
在新建数据库 对话框中,指定数据库的名称。
点击创建 。
gcloud
如需了解参考信息,请参阅 gcloud
sql databases create 。
如需了解 SQL Server 的排序规则,请参阅 SQL Server 文档中的排序规则和 Unicode 支持 。
gcloud sql databases create DATABASE_NAME \
--instance= INSTANCE_NAME \
[ --charset= CHARSET ] \
[ --collation= COLLATION ]
如需创建数据库,请使用 Terraform 资源 。
应用更改
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
启动 Cloud Shell 。
设置要应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块” )。
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有 .tf 扩展名,例如 main.tf。在本教程中,该文件称为 main.tf。
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的 main.tf 中。
(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
查看和修改要应用到您的环境的示例参数。
保存更改。
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:
terraform init -upgrade
应用更改
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
terraform apply
等待 Terraform 显示“应用完成!”消息。
打开您的 Google Cloud 项目 以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
注意: Terraform 示例通常假定您的 Google Cloud 项目中启用了所需的 API。
删除更改
如需删除更改,请执行以下操作:
如需停用防删除保护,请在 Terraform 配置文件中将 deletion_protection 参数设置为 false。
deletion_protection = "false"
运行以下命令并在提示符处输入 yes,以应用更新后的 Terraform 配置:
terraform apply
运行以下命令并在提示符处输入 yes,以移除之前使用 Terraform 配置应用的资源:
terraform destroy
REST v1
以下请求使用 databases:insert 方法在指定的实例上创建新数据库。
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
instance-id :实例 ID
database-name :Cloud SQL 实例中数据库的名称
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases
请求 JSON 正文:
{
"project": "project-id ",
"instance": "instance-id ",
"name": "database-name "
}
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases"
PowerShell (Windows)
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "CREATE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
REST v1beta4
以下请求使用 databases:insert 方法在指定的实例上创建新数据库。
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
instance-id :实例 ID
database-name :Cloud SQL 实例中数据库的名称
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases
请求 JSON 正文:
{
"project": "project-id ",
"instance": "instance-id ",
"name": "database-name "
}
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases"
PowerShell (Windows)
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "CREATE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
列出数据库
要列出实例上的所有数据库,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往 Cloud SQL 实例 页面。
转到“Cloud SQL 实例”
如需打开实例的概览 页面,请点击实例名称。
点击左侧菜单中的数据库 。数据库 页面列出了数据库及其排序规则类型、字符集和数据库类型。
REST v1
以下请求使用 databases:list 方法列出实例的数据库。
使用此 API 列出数据库时,您将看到控制台未显示的其他模板数据库和一个系统数据库。您不能删除或管理此系统数据库。
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
instance-id :实例 ID
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
执行以下命令:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases"
PowerShell (Windows)
执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#database",
"charset": "utf8",
"collation": "utf8_general_ci",
"etag": "etag ",
"name": "sys",
"instance": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/sys",
"project": "project-id "
}
注意 :databases.list API 仅支持包含最多 4 MB 文本的响应载荷。
如果您对大型实例运行数据库列表请求,则可能会收到错误。如果出现这种情况,我们建议您直接从实例运行请求,以获取数据库列表。
REST v1beta4
以下请求使用 databases:list 方法列出实例的数据库。
使用此 API 列出数据库时,您将看到控制台未显示的其他模板数据库和一个系统数据库。您不能删除或管理此系统数据库。
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
instance-id :实例 ID
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
执行以下命令:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases"
PowerShell (Windows)
执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#database",
"charset": "utf8",
"collation": "utf8_general_ci",
"etag": "etag ",
"name": "sys",
"instance": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/sys",
"project": "project-id "
}
注意 :databases.list API 仅支持包含最多 4 MB 文本的响应载荷。
如果您对大型实例运行数据库列表请求,则可能会收到错误。如果出现这种情况,我们建议您直接从实例运行请求,以获取数据库列表。
更改数据库所有者
如果您想删除与不再活跃的数据库所有者关联的用户登录信息,必须先分配新的数据库所有者。
如需添加新的数据库所有者,请完成以下操作:
gcloud
连接到您的数据库并创建两个演示账号:
create login TEST_LOGIN with password = 'TEST_PASSWORD '
create login REPORT_USER with password = 'REPORT_USER_PASSWORD '
GRANT CREATE ANY DATABASE TO TEST_LOGIN AS [ CustomerDbRootRole]
进行以下替换:
TEST_LOGIN :测试账号的名称,例如 test-login。
TEST_PASSWORD :测试账号的密码。
REPORT_USER :第二个用户账号的名称,例如 report-user。此账号将成为新的数据库所有者。
REPORT_USER_PASSWORD :第二个用户账号的密码。
使用您刚创建的测试账号连接到数据库。然后,使用以下命令创建测试数据库:
CREATE DATABASE TEST_DB
进行以下替换:
TEST_DB :您要创建的测试数据库的名称,例如 test-database
TEST_LOGIN :测试账号的名称,例如 test-login。
数据库所有者会自动设置为测试账号。
使用 SQL Server 登录名连接到数据库。然后,运行以下命令以尝试删除登录名 TEST_LOGIN :
drop login TEST_LOGIN
将 TEST_LOGIN 替换为测试账号的名称,例如 test-login。
操作失败,并返回以下错误:
Login TEST_LOGIN owns one or more database(s). Change
the owner of the database(s) before dropping the login.
以 REPORT_USER 账号连接到 TEST_DB 数据库,并授予该账号与现有所有者匹配的权限。
GRANT IMPERSONATE on LOGIN::REPORT_USER to TEST_LOGIN
以测试账号连接到数据库。然后,运行以下命令,以将第二个账号授权为数据库所有者:
ALTER AUTHORIZATION ON DATABASE::TEST_DB TO REPORT_USER
以 REPORT_USER 身份连接到数据库,并移除所有已授予的权限。
REVOKE IMPERSONATE on LOGIN::REPORT_USER to TEST_LOGIN
以 SQL Server 账号身份连接到数据库。然后,运行以下命令以删除 TEST_LOGIN 登录名:
DROP LOGIN TEST_LOGIN
完成后,系统会返回以下消息:
DROP LOGIN for TEST_LOGIN by sqlserver(sqlserver) is successful.
删除数据库
要删除 Cloud SQL 实例上的数据库,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往 Cloud SQL 实例 页面。
转到“Cloud SQL 实例”
如需打开实例的概览 页面,请点击实例名称。
点击左侧菜单中的数据库 。
在数据库列表中,找到您要删除的数据库并点击回收站图标。
在删除数据库 对话框中,输入数据库的名称,然后点击删除 。
REST v1
以下请求使用 databases:delete 方法删除指定数据库。
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
instance-id :实例 ID
database-name :Cloud SQL 实例中数据库的名称
HTTP 方法和网址:
DELETE https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/database-name
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
执行以下命令:
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/database-name "
PowerShell (Windows)
执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method DELETE ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/database-name " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "DELETE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
REST v1beta4
以下请求使用 databases:delete 方法删除指定数据库。
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
instance-id :实例 ID
database-name :Cloud SQL 实例中数据库的名称
HTTP 方法和网址:
DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/database-name
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
执行以下命令:
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/database-name "
PowerShell (Windows)
执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method DELETE ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/database-name " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "DELETE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可 获得了许可,并且代码示例已根据 Apache 2.0 许可 获得了许可。有关详情,请参阅 Google 开发者网站政策 。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-12-17。
[null,null,["最后更新时间 (UTC):2025-12-17。"],[],[]]