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. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Cloud Storage, Cloud SQL Admin, and Compute Engine API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Cloud Storage, Cloud SQL Admin, and Compute Engine API を有効にします。

    API を有効にする

  8. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

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

このセクションでは、事前に読み込まれたサンプル データベースにデータを入力するスクリプトを作成します。次に、このデータベースを使用する 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 バケットを作成します。

    gsutil mb -l US "gs://${DEVSHELL_PROJECT_ID}-sql-backups"
    

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

このセクションでは、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)
    
    gsutil cp -n c:\backup\testdb.bak gs://$PROJECT_ID-sql-backups
    

バックアップ ファイルを 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 バケットのアクセス制御リスト(ACL)に、サービス アカウントを追加します。

    gsutil acl ch -u ${SVC_EMAIL_ADDRESS}:W gs://${DEVSHELL_PROJECT_ID}-sql-backups
    
  3. リーダー権限を持つインポート ファイルに、サービス アカウントを追加します。

    gsutil acl ch -u $SVC_EMAIL_ADDRESS:R gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak
    
  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. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ