Migrer des données entre SQL Server 2017 et Cloud SQL pour SQL Server à l'aide de fichiers de sauvegarde


Dans ce tutoriel, vous allez migrer des données de SQL Server 2017 Enterprise exécutées sur Compute Engine vers Cloud SQL pour SQL Server 2017 Enterprise. Ce tutoriel explique comment exporter les données à partir de SQL Server 2017, les importer dans Cloud SQL pour SQL Server 2017 et vérifier qu'elles ont bien été importées.

Si vous souhaitez transférer des données depuis SQL Server 2008, consultez la section Migrer des données entre SQL Server 2008 et Cloud SQL pour SQL Server à l'aide de fichiers de sauvegarde.

Ce tutoriel s'adresse aux administrateurs système, développeurs, ingénieurs, administrateurs de bases de données ou ingénieurs DevOps souhaitant migrer des données de SQL Server 2017 vers Cloud SQL pour SQL Server.

Pour ce tutoriel, nous partons du principe que vous connaissez bien les éléments suivants :

Objectifs

  • Créer une instance de machine virtuelle (VM) SQL Server sur Compute Engine pour héberger l'exemple de base de données
  • Créer une instance Cloud SQL pour SQL Server
  • Créer un bucket Cloud Storage
  • Sauvegarder l'exemple de base de données
  • Importer la base de données dans Cloud SQL pour SQL Server
  • Valider les données importées

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activer les API Cloud Storage, Cloud SQL Admin, and Compute Engine.

    Activer les API

  5. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  6. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  7. Activer les API Cloud Storage, Cloud SQL Admin, and Compute Engine.

    Activer les API

  8. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

Créer un script pour un exemple de base de données

Dans cette section, vous allez créer un script pour remplir un exemple de base de données préchargée. Vous allez ensuite créer une instance SQL Server 2017 sur Compute Engine qui utilise cette base de données.

  1. Dans Cloud Shell, créez un script PowerShell à déployer en tant que script de démarrage :

    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
    

    Ce script de démarrage crée une base de données locale nommée testdb avec une table appelée MarylandZipCodes. Il télécharge ensuite le registre public des codes postaux du Maryland et l'importe dans la table.

  2. Créez une instance SQL Server 2017 Enterprise pour Windows Server 2016 :

    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
    

    Pour ce tutoriel, vous allez créer l'instance dans la zone us-central1-f avec une taille de disque de démarrage de 50 Go. Pour en savoir plus sur les zones, consultez la section Emplacements Cloud. L'option --metadata-from-file définit le script PowerShell en tant que script de démarrage de l'instance.

Créer l'instance Cloud SQL et le bucket Cloud Storage

  1. Dans Cloud Shell, créez l'instance Cloud SQL pour SQL Server 2017 Enterprise vers laquelle vous migrerez ultérieurement la base de données :

    gcloud beta sql instances create target  \
        --database-version=SQLSERVER_2017_ENTERPRISE \
        --cpu=2 \
        --memory=5GB \
        --root-password=sqlserver12@ \
        --zone=us-central1-f
    

    La création de l'instance peut prendre quelques minutes. Le nom d'utilisateur racine par défaut est sqlserver et le mot de passe par défaut est sqlserver12@. Pour ce tutoriel, vous créez l'instance dans la zone us-central1-f. Pour en savoir plus sur les zones, consultez la page Emplacements Cloud.

  2. Créez un bucket Cloud Storage pour stocker le fichier de sauvegarde avant l'importation des données dans Cloud SQL :

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

Sauvegarder l'exemple de base de données

Dans cette section, vous allez vous connecter à la machine virtuelle (VM) SQL Server, créer une sauvegarde de la base de données, puis importer cette sauvegarde dans Cloud Storage.

  1. Dans Cloud Shell, réinitialisez le mot de passe de l'instance de VM SQL Server :

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

    Notez le nouveau mot de passe de l'utilisateur.

  2. Installez un client RDP (Remote Desktop Protocol). Pour plus d'informations, voir les clients Bureau à distance de Microsoft.

  3. Dans la console Google Cloud, accédez à la page Instances de VM.

    ACCÉDER À LA PAGE INSTANCES DE VM

  4. Dans la section Compute Engine de la console Google Cloud, cliquez sur le menu déroulant RDP et sélectionnez l'option Télécharger le fichier RDP. pour télécharger le fichier RDP correspondant à votre instance de VM SQL Server.

    Utilisez ce fichier pour vous connecter à l'instance à l'aide d'un client RDP. Pour plus d'informations, voir les clients Bureau à distance de Microsoft.

  5. Dans le navigateur, réduisez toutes les fenêtres, puis lancez l'outil de ligne de commande PowerShell.

  6. Créez un dossier de sauvegarde :

    mkdir c:\backup
    
  7. Dans le navigateur, créez une sauvegarde de la base de données dans le dossier de sauvegarde :

    osql -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb.bak'"
    
  8. Depuis l'interface système de l'instance, copiez le fichier de sauvegarde dans le bucket Cloud Storage :

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

Importer le fichier de sauvegarde dans Cloud SQL

  1. Dans Cloud Shell, récupérez les informations du compte de service associé à l'instance Cloud SQL et enregistrez-les dans une variable :

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

    Google Cloud crée un compte de service lorsque vous créez l'instance Cloud SQL. Vous utilisez le compte de service pour autoriser l'instance Cloud SQL à accéder aux ressources dont elle a besoin.

  2. Ajoutez le compte de service à la liste de contrôle d'accès (LCA) du bucket Cloud Storage avec les autorisations "writer" (rédacteur) :

    gsutil acl ch -u ${SVC_EMAIL_ADDRESS}:W gs://${DEVSHELL_PROJECT_ID}-sql-backups
    
  3. Ajoutez le compte de service au fichier d'importation avec les autorisations "reader" (lecteur) :

    gsutil acl ch -u $SVC_EMAIL_ADDRESS:R gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak
    
  4. Importez le fichier de sauvegarde dans la base de données Cloud SQL :

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

Valider l'importation des données

Dans cette section, vous allez vérifier que les données ont bien été importées.

  1. Dans Cloud Shell, installez la boîte à outils SQL Server :

    sudo apt-get install -y mssql-tools
    

    Si vous acceptez les conditions de la licence, saisissez yes lorsque vous y êtes invité.

  2. Pour accéder de manière sécurisée à votre instance Cloud SQL, téléchargez le proxy Cloud SQL :

    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  3. Démarrez le proxy Cloud SQL :

    CONNECTION_NAME=$(gcloud sql instances describe target --format='value(connectionName)')
    ./cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
    
  4. Lisez le nombre de lignes dans la table Cloud SQL :

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

    Lorsque vous y êtes invité, saisissez le mot de passe sqlserver12@. Dans la sortie, assurez-vous que le résultat correspond à 619.

Effectuer un nettoyage

Le moyen le plus simple d'éviter la facturation consiste à supprimer le projet Google Cloud que vous avez créé pour le tutoriel.

Supprimer le projet

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Étape suivante