Importer des données dans Cloud SQL

Cette page explique comment importer des données dans des instances Cloud SQL. Vous pouvez importer des données à partir de fichiers de vidage SQL ou CSV.

Pour obtenir des conseils en matière d'importation de données, consultez la page Bonnes pratiques pour l'importation et l'exportation de données.

Une fois l'opération d'importation terminée, vérifiez les résultats.

Avant de commencer

Rôles et autorisations requis

Cette procédure nécessite l'importation d'un fichier à partir de Cloud Storage. Pour importer des données depuis Cloud Storage, le compte de service ou l'utilisateur doit disposer de l'un des rôles suivants :

  • Rôle Admin Cloud SQL Editor et rôle IAM roles/storage.legacyObjectReader.
  • Rôle personnalisé comprenant les autorisations suivantes :
    • cloudsql.instances.get
    • cloudsql.instances.import
    • storage.buckets.get
    • storage.objects.get

Si le compte ou l'utilisateur effectuent également des opérations d'exportation, il peut être plus pratique d'accorder le rôle IAM Storage Object Admin afin de disposer de toutes les autorisations requises pour l'importation et l'exportation. Pour obtenir de l'aide sur les rôles IAM, consultez la page Cloud Identity and Access Management pour Cloud Storage.

Importer des données à partir d'un fichier de vidage SQL dans Cloud SQL

  • Créez un fichier de vidage SQL. Ces instructions définissent certaines options qui rendent le fichier de vidage compatible avec Cloud SQL.

  • La base de données destinée à recevoir l'importation doit déjà exister sur votre instance Cloud SQL. Pour obtenir de l'aide concernant la création d'une base de données, consultez la page Créer une base de données.
  • Avant d'importer un fichier de vidage SQL, assurez-vous que tous les utilisateurs de la base de donnée vidée qui possèdent des objets ou qui disposent d'autorisations sur des objets qu'elle contient existent dans la nouvelle base de données. Si ce n'est pas le cas, l'importation ne parvient pas à recréer les objets en rétablissant les propriétaires et/ou les autorisations d'origine. (Cela peut parfois être le comportement souhaité, mais ce n'est généralement pas le cas).

    Pour savoir comment créer des utilisateurs, consultez la page Créer des utilisateurs.

Pour importer des données à partir d'un fichier de vidage SQL vers une instance Cloud SQL, procédez comme suit :

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Cliquez sur le nom de l'instance pour ouvrir la page Présentation.
  3. Cliquez sur Import (Importer).
  4. Dans la section Sélectionnez le fichier à partir duquel vous souhaitez importer des données, saisissez le chemin d'accès au bucket et au fichier de vidage SQL à utiliser pour l'importation. Ou accédez au fichier :
    1. Cliquez sur Parcourir.
    2. Dans la section Emplacement, double-cliquez sur le nom du bucket dans la liste.
    3. Sélectionnez le fichier dans la liste.
    4. Cliquez sur Sélectionner.

    Vous pouvez importer un fichier compressé (.gz) ou non compressé (.sql).

  5. Pour le paramètre Format, sélectionnez SQL.
  6. Sélectionnez la base de données dans laquelle vous souhaitez importer les données.

    Cloud SQL exécute alors l'instruction USE DATABASE (Utiliser la base de données) avant l'importation.

  7. Si vous souhaitez spécifier un utilisateur PostgreSQL pour effectuer l'importation, sélectionnez-le.

    Si votre fichier d'importation contient des instructions devant être exécutées par un utilisateur PostgreSQL spécifique, utilisez ce champ pour le spécifier.

  8. Cliquez sur Importer pour démarrer l'importation.

gcloud

  1. Créez un bucket Cloud Storage, si ce n'est déjà fait.

    Pour obtenir de l'aide concernant la création d'un bucket, consultez la page Créer des buckets de stockage.

  2. Importez le fichier dans le bucket.

    Pour obtenir de l'aide concernant l'importation de fichiers dans des buckets, consultez la page Importer des objets.

  3. Décrivez l'instance dans laquelle vous réalisez l'importation :
    gcloud sql instances describe INSTANCE_NAME
    
  4. Copiez le champ serviceAccountEmailAddress.
  5. Utilisez gsutil iam pour accorder le rôle IAM storage.objectAdmin au compte de service du bucket.
      gsutil iam ch serviceAccount:SERVICE-ACCOUNT:objectAdmin \
      gs://BUCKET-NAME
      
    Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.
  6. Importez la base de données :
    gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/IMPORT_FILE_NAME \
    --database=DATABASE_NAME
    

    Pour plus d'informations sur l'utilisation de la commande import sql, consultez la page de référence de la commande sql import sql.

    Si la commande affiche une erreur de type "ERROR_RDBMS", vérifiez les autorisations. Cette erreur est souvent liée à des problèmes d'autorisations.

  7. Si vous n'avez pas besoin de conserver les autorisations IAM que vous avez définies précédemment, supprimez-les en utilisant gsutil iam.

REST v1

    Créez un fichier de vidage SQL. Ces instructions définissent certaines options qui rendent le fichier de vidage compatible avec Cloud SQL.

  1. Créez un bucket Cloud Storage, si ce n'est déjà fait.

    Pour obtenir de l'aide concernant la création d'un bucket, consultez la page Créer des buckets de stockage.

  2. Importez le fichier dans le bucket.

    Pour obtenir de l'aide concernant l'importation de fichiers dans des buckets, consultez la page Importer des objets.

  3. Attribuez à votre instance les rôles IAM legacyBucketWriter et objectViewer pour votre bucket. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.
  4. Importez le fichier de vidage :

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • project-id : ID du projet
    • instance-id : ID de l'instance
    • bucket_name : nom du bucket Cloud Storage
    • path_to_sql_file : chemin d'accès au fichier SQL
    • database_name : nom d'une base de données dans l'instance Cloud SQL

    Méthode HTTP et URL :

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import

    Corps JSON de la requête :

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://bucket_name/path_to_sql_file",
          "database": "database_name"
        }
    }
    
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    Vous devriez recevoir une réponse JSON de ce type :

    Pour utiliser un autre utilisateur pour l'importation, spécifiez la propriété importContext.importUser.

    Pour obtenir la liste complète des paramètres de cette requête, consultez la page instances:import.
  5. Si vous n'avez pas besoin de conserver les autorisations IAM que vous avez définies précédemment, supprimez-les dès maintenant.

REST v1beta4

    Créez un fichier de vidage SQL. Ces instructions définissent certaines options qui rendent le fichier de vidage compatible avec Cloud SQL.

  1. Créez un bucket Cloud Storage, si ce n'est déjà fait.

    Pour obtenir de l'aide concernant la création d'un bucket, consultez la page Créer des buckets de stockage.

  2. Importez le fichier dans le bucket.

    Pour obtenir de l'aide concernant l'importation de fichiers dans des buckets, consultez la page Importer des objets.

  3. Attribuez à votre instance le rôle IAM storage.objectAdmin pour votre bucket. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.
  4. Importez le fichier de vidage :

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • project-id : ID du projet
    • instance-id : ID de l'instance
    • bucket_name : nom du bucket Cloud Storage
    • path_to_sql_file : chemin d'accès au fichier SQL
    • database_name : nom d'une base de données dans l'instance Cloud SQL

    Méthode HTTP et URL :

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import

    Corps JSON de la requête :

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://bucket_name/path_to_sql_file",
          "database": "database_name"
        }
    }
    
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    Vous devriez recevoir une réponse JSON de ce type :

    Pour utiliser un autre utilisateur pour l'importation, spécifiez la propriété importContext.importUser.

    Pour obtenir la liste complète des paramètres de cette requête, consultez la page instances:import.
  5. Si vous n'avez pas besoin de conserver les autorisations IAM que vous avez définies précédemment, supprimez-les dès maintenant.
Pour découvrir comment est formée la requête sous-jacente de l'API REST pour cette tâche, consultez la page sur la méthode "instances:import" dans APIs Explorer.

Importer des données à partir d'un fichier CSV dans Cloud SQL

  • La base de données et la table dans lesquelles vous procédez à l'importation doivent déjà exister sur l'instance Cloud SQL. Pour obtenir de l'aide concernant la création d'une base de données, consultez la page Créer une base de données. Pour créer une table dans la base de données, utilisez l'instruction SQL CREATE TABLE dans le client psql.
  • Votre fichier CSV doit être conforme aux exigences relatives au format de fichier CSV décrites ci-dessous.

Exigences relatives au format de fichier CSV

Les fichiers CSV doivent comporter une ligne par rangée de données ainsi que des champs séparés par une virgule.

Pour obtenir des instructions sur l'exportation vers un fichier CSV formaté pour Cloud SQL, consultez la section Exporter des données de Cloud SQL vers un fichier CSV.

Pour importer des données dans une instance Cloud SQL à l'aide d'un fichier CSV :

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Cliquez sur le nom de l'instance pour ouvrir la page Présentation.
  3. Cliquez sur Import (Importer).
  4. Dans la section Sélectionnez le fichier à partir duquel vous souhaitez importer des données, saisissez le chemin d'accès au bucket et au fichier CSV à utiliser pour l'importation. Ou accédez au fichier :
    1. Cliquez sur Parcourir.
    2. Dans la section Emplacement, double-cliquez sur le nom du bucket dans la liste.
    3. Sélectionnez le fichier dans la liste.
    4. Cliquez sur Sélectionner.

    Vous pouvez importer un fichier compressé (.gz) ou non compressé (.csv).

  5. Dans la section Format, sélectionnez CSV.
  6. Spécifiez la base de données et la table de votre instance Cloud SQL dans lesquelles vous souhaitez importer le fichier CSV.
  7. Vous pouvez éventuellement spécifier un utilisateur pour l'importation.
  8. Cliquez sur Importer pour démarrer l'importation.

gcloud

  1. Créez un bucket Cloud Storage, si ce n'est déjà fait.

    Pour obtenir de l'aide concernant la création d'un bucket, consultez la page Créer des buckets de stockage.

  2. Importez le fichier dans le bucket.

    Pour obtenir de l'aide concernant l'importation de fichiers dans des buckets, consultez la page Importer des objets.

  3. Importez les données du fichier CSV dans le bucket.
  4. Décrivez l'instance à partir de laquelle vous souhaitez exporter :
    gcloud sql instances describe INSTANCE_NAME
    
  5. Copiez le champ serviceAccountEmailAddress.
  6. Utilisez gsutil iam pour accorder au compte de service le rôle IAM storage.objectAdmin sur le bucket. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.
  7. Importez le fichier :
    gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --table=TABLE_NAME
    

    Pour plus d'informations sur l'utilisation de la commande import csv, consultez la page de référence de la commande sql import csv.

  8. Si vous n'avez pas besoin de conserver les autorisations IAM que vous avez définies précédemment, supprimez-les en utilisant gsutil iam.

REST v1

  1. Créez un bucket Cloud Storage, si ce n'est déjà fait.

    Pour obtenir de l'aide concernant la création d'un bucket, consultez la page Créer des buckets de stockage.

  2. Importez le fichier dans le bucket.

    Pour obtenir de l'aide concernant l'importation de fichiers dans des buckets, consultez la page Importer des objets.

  3. Attribuez à votre instance les rôles IAM legacyBucketWriter et objectViewer pour votre bucket. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.
  4. Importez le fichier :

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • project-id : ID du projet
    • instance-id : ID de l'instance
    • bucket_name : nom du bucket Cloud Storage
    • path_to_csv_file : chemin d'accès au fichier CSV
    • database_name : nom d'une base de données dans l'instance Cloud SQL
    • table_name : nom de la table de base de données

    Méthode HTTP et URL :

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import

    Corps JSON de la requête :

    {
     "importContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "database": "database_name",
          "csvImportOptions":
           {
             "table": "table_name"
           }
       }
    }
    
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    Vous devriez recevoir une réponse JSON de ce type :

    Pour définir un autre utilisateur pour l'importation, spécifiez la propriété importContext.importUser.

    Pour obtenir la liste complète des paramètres de cette requête, consultez la page instances:import.
  5. Si vous n'avez pas besoin de conserver les autorisations Cloud IAM que vous avez définies précédemment, supprimez-les.

REST v1beta4

  1. Créez un bucket Cloud Storage, si ce n'est déjà fait.

    Pour obtenir de l'aide concernant la création d'un bucket, consultez la page Créer des buckets de stockage.

  2. Importez le fichier dans le bucket.

    Pour obtenir de l'aide concernant l'importation de fichiers dans des buckets, consultez la page Importer des objets.

  3. Attribuez à votre instance le rôle IAM storage.objectAdmin pour votre bucket. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.
  4. Importez les données à partir du fichier :

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • project-id : ID du projet
    • instance-id : ID de l'instance
    • bucket_name : nom du bucket Cloud Storage
    • path_to_csv_file : chemin d'accès au fichier CSV
    • database_name : nom d'une base de données dans l'instance Cloud SQL
    • table_name : nom de la table de base de données

    Méthode HTTP et URL :

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import

    Corps JSON de la requête :

    {
     "importContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "database": "database_name",
          "csvImportOptions":
           {
             "table": "table_name"
           }
       }
    }
    
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    Vous devriez recevoir une réponse JSON de ce type :

    Pour définir un autre utilisateur pour l'importation, spécifiez la propriété importContext.importUser.

    Pour obtenir la liste complète des paramètres de cette requête, consultez la page instances:import.
  5. Si vous n'avez pas besoin de conserver les autorisations Cloud IAM que vous avez définies précédemment, supprimez-les.

Si vous obtenez une erreur telle que ERROR_RDBMS, vérifiez que la table existe bien. Si tel est le cas, vérifiez que vous disposez des autorisations appropriées sur le bucket. Pour vous aider à configurer le contrôle des accès dans Cloud Storage, consultez la page Créer et gérer des listes de contrôle d'accès.

Pour découvrir comment est formée la requête sous-jacente de l'API REST pour cette tâche, consultez la page sur la méthode "instances:import" dans APIs Explorer.

Importer des données dans Cloud SQL à l'aide de pg_restore

Vous pouvez utiliser l'utilitaire pg_restore pour importer une base de données dans Cloud SQL. pg_restore ne fonctionne qu'avec les fichiers d'archive créés par pg_dump. En savoir plus sur pg_restore.

Si le fichier de vidage a été créé au format texte brut, exécutez la commande suivante :

pg_restore -h CLOUD_SQL_INSTANCE_IP -U USERNAME --no-owner --no-acl -d DATABASE_NAME SQL_FILE.sql

Si le fichier de vidage a été créé avec un format personnalisé, exécutez la commande suivante :

pg_restore --list  DATABASE_NAME .dmp | sed -E 's/(.* EXTENSION )/; \1/g' >  DATABASE_NAME.toc

Le post-traitement sed met en commentaire toutes les instructions d'extension dans le fichier de vidage SQL.

Pour importer en parallèle, utilisez l'option -j NUM_CORES. NUM_CORES est le nombre de cœurs sur l'instance source. Utilisez la même option avec pg_dump pour exporter en parallèle.

Dépannage

Problème Dépannage
L'opération d'importation prend trop de temps. Un trop grand nombre de connexions actives peut interférer avec les opérations d'importation.

Fermez les opérations inutilisées. Vérifiez l'utilisation du processeur et de la mémoire de votre instance Cloud SQL pour vous assurer que de nombreuses ressources sont disponibles. Le meilleur moyen de s'assurer de la présence d'un nombre maximal de ressources pour l'opération d'importation consiste à redémarrer l'instance avant de lancer l'importation.

Un redémarrage :

  • ferme toutes les connexions ;
  • met fin à toutes les tâches susceptibles de consommer des ressources.
Une opération d'importation peut échouer lorsqu'un ou plusieurs utilisateurs référencés dans le fichier de vidage n'existent pas. Avant d'importer un fichier de vidage, tous les utilisateurs de la base de données qui possèdent des objets ou disposent d'autorisations sur les objets qu'elle contient doivent exister dans la base de données cible. Si ce n'est pas le cas, l'opération d'importation ne parvient pas à recréer les objets en rétablissant les propriétaires ou les autorisations d'origine.

Créez les utilisateurs de la base de données avant de l'importer.

Étape suivante