如果您想要从 SQL Server 2017 迁移数据,请参阅使用备份文件在 SQL Server 2017 和 Cloud SQL for SQL Server 之间迁移数据。
如果您是系统管理员、开发者、工程师、数据库管理员或 DevOps 工程师,希望将数据从 SQL Server 2008 迁移到 Cloud SQL for SQL Server 2017 或者希望从 SQL Server 2008 升级到 SQL Server 2017,那么本教程非常适合您。
本教程假定您拥有 SQL Server 2008 许可,并且熟悉以下内容:
- Microsoft SQL Server 2008
- Microsoft SQL Server 2017
- Microsoft PowerShell
- Cloud Storage
- Cloud SQL
目标
- 创建 Cloud SQL for SQL Server 实例。
- 创建 Cloud Storage 存储桶。
- 备份数据库。
- 将数据库导入 Cloud SQL for SQL Server。
- 验证导入的数据。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
在 Google Cloud 控制台的“项目选择器”页面上,选择或创建一个 Google Cloud 项目。
确保您的 Google Cloud 项目已启用结算功能。 了解如何确认您的项目已启用结算功能。
启用 Cloud Storage 和 Cloud SQL API。
在运行 SQL Server 2008 的服务器上安装并初始化 Google Cloud CLI。
在 Google Cloud 控制台中,转到 Cloud Shell。
Cloud Shell 会话随即会在 Google Cloud 控制台底部打开,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟来完成初始化。
创建 Cloud SQL 实例和 Cloud Storage 存储桶
在 Cloud Shell 中,创建以后要将数据库迁移到的 Cloud SQL for SQL Server 2017 Enterprise 实例:
gcloud beta sql instances create target \ --database-version=SQLSERVER_2017_ENTERPRISE \ --cpu=2 \ --memory=5GB \ --root-password=sqlserver12@ \ --zone=us-central1-f
该实例可能需要几分钟才能创建完成。默认根用户名为
sqlserver
,默认密码为sqlserver12@
。在本教程中,您将在us-central1-f
地区创建该实例。如需详细了解地区,请参阅 Cloud 位置。在将数据导入 Cloud SQL 之前,创建一个用于存储备份文件的 Cloud Storage 存储桶:
gcloud storage buckets create "gs://bucket-name" --location=US
将
bucket-name
替换为 Cloud Storage 存储桶的唯一名称。
备份数据库
在本部分中,您将连接到运行 SQL Server 2008 的 Windows 服务器,创建数据库备份,并将备份数据库上传到 Cloud Storage。
使用 RDP 连接到运行 SQL Server 2008 的 Windows 服务器。它可以是主服务器,也可以是副本服务器。
启动 PowerShell 命令行工具。
在安装了 gcloud CLI 的终端中,创建一个备份文件夹:
mkdir c:\backup
在备份文件夹中创建数据库备份:
osql -E -Q "BACKUP DATABASE db-name TO DISK='c:\backup\db-name.bak'"
将
db-name
替换为要迁移到 Cloud SQL 的数据库的名称。将备份文件复制到 Cloud Storage 存储桶:
$PROJECT_ID = (gcloud sql instances describe target --format='value(project)' ) gcloud storage cp c:\backup\db-name.bak gs://bucket-name --no-clobber
将备份文件导入 Cloud SQL
在 Cloud Shell 中,检索与 Cloud SQL 实例相关联的服务账号,并将其保存到变量中:
SVC_EMAIL_ADDRESS=$(gcloud sql instances describe target \ --format='value(serviceAccountEmailAddress)') echo $SVC_EMAIL_ADDRESS
当您创建 Cloud SQL 实例时,Google Cloud 会创建一个服务账号。您可以使用该服务账号授予 Cloud SQL 实例访问其所需资源的权限。
为服务账号授予将文件写入 Cloud Storage 存储桶的权限:
gcloud storage buckets add-iam-policy-binding gs://bucket-name \ --member=serviceAccount:${SVC_EMAIL_ADDRESS} \ --role=roles/storage.legacyBucketWriter
为服务账号授予读取 Cloud Storage 存储桶中的文件的权限:
gcloud storage buckets add-iam-policy-binding gs://bucket-name \ --member=serviceAccount:${SVC_EMAIL_ADDRESS} \ --role=roles/storage.legacyObjectReader
将备份文件导入 Cloud SQL 数据库:
gcloud beta sql import bak target \ gs://bucket-namedb-name.bak \ --database db-name
验证数据导入
在本部分中,您将检查数据是否已成功导入。
在 Cloud Shell 中,安装 SQL Server 工具包:
sudo apt-get install -y mssql-tools
如果您接受许可条款,请在出现提示时输入
yes
。要安全访问您的 Cloud SQL 实例,请下载 Cloud SQL 代理:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
启动 Cloud SQL 代理:
CONNECTION_NAME=$(gcloud sql instances describe target --format='value(connectionName)') ./cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
运行查询,以验证一个或多个表中的数据:
/opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q "query-string"
将
query-string
替换为您要运行的 SQL 查询。出现提示时,输入密码
sqlserver12@
。
清理
若要避免产生费用,最简单的方法是删除您为本教程创建的 Google Cloud 项目。删除项目
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
后续步骤
- 了解适用于 Cloud SQL for SQL Server 的客户管理的加密密钥 (CMEK)。
- 了解如何为 Cloud SQL for SQL Server 配置专用 IP 连接。
- 探索有关 Google Cloud 的参考架构、图表和最佳实践。查看我们的 Cloud 架构中心。