使用备份文件在 SQL Server 2008 和 Cloud SQL for SQL Server 之间迁移数据

在本教程中,您需要将数据从 SQL Server 2008 迁移到 Cloud SQL for SQL Server 2017 Enterprise。本教程介绍如何从 SQL Server 2008 导出数据、将这些数据导入 Cloud SQL for SQL Server 2017,并验证这些数据是否已成功导入。

如果您想要从 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 许可,并且熟悉以下内容:

目标

  • 创建 Cloud SQL for SQL Server 实例。
  • 创建 Cloud Storage 存储分区。
  • 备份数据库。
  • 将数据库导入 Cloud SQL for SQL Server。
  • 验证导入的数据。

费用

本教程使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用量来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本教程后,您可以删除所创建的资源以避免继续计费。如需了解详情,请参阅清理

准备工作

  1. 在 Cloud Console 的项目选择器页面上,选择或创建 Google Cloud 项目。

    转到项目选择器页面

  2. 确保您的 Cloud 项目已启用结算功能。了解如何确认您的项目已启用结算功能

  3. 启用 Cloud Storage 和 Cloud SQL API。

    启用 API

  4. 在运行 SQL Server 2008 的服务器上安装并初始化 Cloud SDK

  5. 在 Cloud Console 中,转到 Cloud Shell。

    转到 Cloud Shell

    Cloud Shell 会话随即会在 Cloud Console 的底部打开,并显示命令行提示。Cloud Shell 是一个已安装 Cloud SDK 的 shell 环境,其中包括 gcloud 命令行工具以及已为当前项目设置的值。该会话可能需要几秒钟来完成初始化。

创建 Cloud SQL 实例和 Cloud Storage 存储分区

  1. 在 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 位置

  2. 在将数据导入 Cloud SQL 之前,创建一个用于存储备份文件的 Cloud Storage 存储分区:

    gsutil mb -b off -l US "gs://bucket-name"
    

    bucket-name 替换为 Cloud Storage 存储分区的唯一名称。

备份数据库

在本部分中,您将连接到运行 SQL Server 2008 的 Windows 服务器,创建数据库备份,并将备份数据库上传到 Cloud Storage。

  1. 使用 RDP 连接到运行 SQL Server 2008 的 Windows 服务器。它可以是主服务器,也可以是副本服务器。

  2. 启动 PowerShell 命令行工具。

  3. 安装了 Cloud SDK 的终端中,创建一个备份文件夹:

    mkdir c:\backup
    
  4. 在备份文件夹中创建数据库备份:

    osql -E -Q "BACKUP DATABASE db-name TO DISK='c:\backup\db-name.bak'"
    

    db-name 替换为要迁移到 Cloud SQL 的数据库的名称。

  5. 将备份文件复制到 Cloud Storage 存储分区:

    $PROJECT_ID = (gcloud sql instances describe target --format='value(project)' )
    gsutil cp -n c:\backup\db-name.bak gs://bucket-name
    

将备份文件导入 Cloud SQL

  1. 在 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 实例访问其所需资源的权限。

  2. 将服务帐号添加到具有写入者权限的 Cloud Storage 存储分区的访问控制列表 (ACL) 中:

    gsutil acl ch -u ${SVC_EMAIL_ADDRESS}:W gs://bucket-name
    
  3. 将服务帐号添加到具有读取者权限的导入文件中:

    gsutil acl ch -u $SVC_EMAIL_ADDRESS:R gs://bucket-name/db-name.bak
    
  4. 将备份文件导入 Cloud SQL 数据库:

    gcloud beta sql import bak target \
        gs://bucket-namedb-name.bak \
        --database db-name
    

验证数据导入

在本部分中,您将检查数据是否已成功导入。

  1. 在 Cloud Shell 中,安装 SQL Server 工具包

    sudo apt-get install -y mssql-tools
    

    如果您接受许可条款,请在出现提示时输入 yes

  2. 要安全访问您的 Cloud SQL 实例,请下载 Cloud SQL 代理

    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  3. 启动 Cloud SQL 代理:

    CONNECTION_NAME=$(gcloud sql instances describe target --format='value(connectionName)')
    ./cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
    
  4. 运行查询,以验证一个或多个表中的数据:

    /opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q "query-string"
    

    query-string 替换为您要运行的 SQL 查询。

    出现提示时,输入密码 sqlserver12@

清理

若要避免产生费用,最简单的方法是删除您为本教程创建的 Cloud 项目。

删除项目

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”页面

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤