如果您想要从 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_ADDRESSGoogle Cloud 会在您创建 Cloud SQL 实例时创建一个服务账号。您可以使用该服务账号授予 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 架构中心。