SQL Server 2017 と Cloud SQL for SQL Server 間でバックアップ ファイルを使用してデータを移行する


このチュートリアルでは、Compute Engine で実行中の SQL Server 2017 Enterprise から Cloud SQL for SQL Server 2017 Enterprise にデータを移行します。SQL Server 2017 からのデータのエクスポート、Cloud SQL for SQL Server 2017 へのインポート、データのインポートが正常であることの検証を実施する方法を説明しています。

SQL Server 2008 からデータを移行する場合は、SQL Server 2008 と Cloud SQL for SQL Server 間でのバックアップ ファイルを使用してデータを移行するをご覧ください。

このチュートリアルは、SQL Server 2017 から Cloud SQL for SQL Server にデータを移行するシステム管理者、デベロッパー、エンジニア、データベース管理者、または DevOps エンジニアの方を対象としています。

このチュートリアルは、読者が次の内容を理解していることを前提としています。

目標

  • Compute Engine でサンプル データベースをホストする SQL Server 仮想マシン(VM)インスタンスを作成します。
  • Cloud SQL for SQL Server インスタンスを作成します。
  • Cloud Storage バケットを作成します。
  • サンプル データベースをバックアップします。
  • Cloud SQL for SQL Server にデータベースをインポートします。
  • インポートされたデータを検証します。

費用

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Storage, Cloud SQL Admin, and Compute Engine APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Storage, Cloud SQL Admin, and Compute Engine APIs.

    Enable the APIs

  8. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

サンプル データベース用のスクリプトの作成

このセクションでは、事前に読み込まれたサンプル データベースにデータを入力するスクリプトを作成します。次に、このデータベースを使用する SQL Server 2017 インスタンスを Compute Engine 上に作成します。

  1. Cloud Shell で、起動スクリプトとしてデプロイする PowerShell スクリプトを作成します。

    cat << 'EOF' > startup.ps1
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    $dataseturl = "https://opendata.maryland.gov/api/views/ryxx-aeaf/rows.csv?accessType=DOWNLOAD"
    Invoke-WebRequest -Uri $dataseturl -OutFile c:\dataset.csv
    Invoke-Sqlcmd -Query "CREATE DATABASE testdb;"
    Invoke-Sqlcmd -Query "CREATE TABLE testdb.dbo.MarylandZipCodes ( zipcode int NOT NULL PRIMARY KEY,  city varchar(255), county varchar(255))"
    Invoke-Sqlcmd -Query "BULK INSERT testdb.dbo.MarylandZipCodes FROM 'c:\dataset.csv' WITH (DATAFILETYPE='char',FIELDTERMINATOR=',' ,ROWTERMINATOR = '0x0a',  FIRSTROW=2);"
    EOF
    

    この起動スクリプトでは、MarylandZipCodes というテーブルがある testdb という名前のローカル データベースを作成します。次に、このスクリプトはメリーランドの公開郵便番号レジストリをダウンロードし、レジストリをテーブルにインポートします。

  2. Windows Server 2016 用の SQL Server 2017 Enterprise インスタンスを作成します。

    gcloud compute instances create sql-server --machine-type n1-highmem-4 \
        --boot-disk-size 50GB \
      --image-project windows-sql-cloud --image-family sql-ent-2017-win-2016 \
      --zone us-central1-f  \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --metadata-from-file windows-startup-script-ps1=startup.ps1
    

    このチュートリアルでは、us-central1-f ゾーンにブートディスク サイズが 50 GB のインスタンスを作成します。ゾーンの詳細については、クラウドのロケーションをご覧ください。--metadata-from-file フラグでは、インスタンスの起動スクリプトとして PowerShell スクリプトを設定します。

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
    

    インスタンスの作成には数分かかることがあります。デフォルトの root ユーザー名は sqlserver で、デフォルトのパスワードは sqlserver12@ です。このチュートリアルでは、インスタンスを us-central1-f ゾーンに作成します。ゾーンの詳細については、クラウドのロケーションをご覧ください。

  2. データを Cloud SQL にインポートする前に、バックアップ ファイルを格納する Cloud Storage バケットを作成します。

    gcloud storage buckets create "gs://${DEVSHELL_PROJECT_ID}-sql-backups" --location=US
    

サンプル データベースのバックアップ

このセクションでは、SQL Server 仮想マシン(VM)に接続し、データベースのバックアップを作成して、Cloud Storage にバックアップ データベースをアップロードします。

  1. Cloud Shell で、SQL Server VM インスタンスのパスワードをリセットします。

    gcloud compute reset-windows-password sql-server --zone=us-central1-f
    

    ユーザーの新しいパスワードをメモしておきます。

  2. リモート デスクトップ プロトコル(RDP)クライアントをインストールします。詳細については、Microsoft リモート デスクトップ クライアントをご覧ください。

  3. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  4. Google Cloud コンソールの [Compute Engine] セクションで、[RDP] プルダウンをクリックして、[RDP ファイルをダウンロード] オプションを選択し、SQL Server VM インスタンスの RDP ファイルをダウンロードします。

    このファイルを RDP クライアントで使用することで、インスタンスに接続できます。詳細については、Microsoft リモート デスクトップ クライアントをご覧ください。

  5. ブラウザで、すべてのウィンドウを最小化し、PowerShell コマンドライン ツールを起動します。

  6. バックアップ フォルダを作成します。

    mkdir c:\backup
    
  7. ブラウザで、バックアップ フォルダにデータベースのバックアップを作成します。

    osql -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb.bak'"
    
  8. インスタンスのシェルで、バックアップ ファイルを Cloud Storage バケットにコピーします。

    $PROJECT_ID=(gcloud config get-value core/project)
    
    gcloud storage cp c:\backup\testdb.bak gs://$PROJECT_ID-sql-backups --no-clobber
    

バックアップ ファイルを Cloud SQL にインポートする

  1. Cloud Shell で、Cloud SQL インスタンスに関連付けられたサービス アカウントを取得し、変数に保存します。

    SVC_EMAIL_ADDRESS=$(gcloud sql instances describe target \
        --format='value(serviceAccountEmailAddress)')
    echo $SVC_EMAIL_ADDRESS
    

    Google Cloud は、Cloud SQL インスタンスの作成時にサービス アカウントを作成します。サービス アカウントを使用して、Cloud SQL インスタンスに必要なリソースへのアクセス権を付与します。

  2. Cloud Storage バケットへの書き込み権限をサービス アカウントに付与します。

    gcloud storage buckets add-iam-policy-binding gs://${DEVSHELL_PROJECT_ID}-sql-backups \
        --member=serviceAccount:${SVC_EMAIL_ADDRESS} \
        --role=roles/storage.legacyBucketWriter
    
  3. Cloud Storage バケット内のファイルを読み取る権限をサービス アカウントに付与します。

    gcloud storage buckets add-iam-policy-binding gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak \
        --member=serviceAccount:${SVC_EMAIL_ADDRESS} \
        --role=roles/storage.legacyObjectReader
    
  4. バックアップ ファイルを Cloud SQL データベースにインポートします。

    gcloud beta sql import bak target \
        gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak --database testdb
    

データのインポートを検証する

このセクションでは、サンプルデータが正常にインポートされたことを確認します。

  1. Cloud Shell で、以下のように SQL Server ツールキットをインストールします。

    sudo apt-get install -y mssql-tools
    

    ライセンス条項に同意する場合は、表示されたプロンプトで「yes」と入力します。

  2. Cloud SQL インスタンスに安全にアクセスするために、Cloud SQL Proxy をダウンロードします。

    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  3. Cloud SQL Proxy を起動します。

    CONNECTION_NAME=$(gcloud sql instances describe target --format='value(connectionName)')
    ./cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
    
  4. Cloud SQL テーブル内の行数を読み取ります。

    /opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q "select count(*)
    from testdb.dbo.MarylandZipCodes"
    

    プロンプトが表示されたら、sqlserver12@ パスワードを入力します。出力で、結果が 619 であることを確認します。

クリーンアップ

課金を停止する最も簡単な方法は、チュートリアル用に作成した Google Cloud プロジェクトを削除することです。

プロジェクトを削除する

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

次のステップ