Exportation de données

Cette page explique comment exporter des données à partir d'instances Cloud SQL ou d'un serveur de base de données non géré par Cloud SQL.

Les exportations utilisent des ressources de base de données, mais elles n'interfèrent pas avec les opérations de base de données normales, sauf si l'instance est sous-provisionnée.

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

Avant de commencer

Rôles et autorisations requis

Pour exporter des données vers Cloud Storage, le compte de service ou l'utilisateur doit disposer de l'un des rôles suivants :

  • Rôle Éditeur Cloud SQL Editor et rôle IAM roles/storage.legacyBucketWriter.
  • Rôle personnalisé comprenant les autorisations suivantes :
    • cloudsql.instances.get
    • cloudsql.instances.export
    • storage.buckets.create
    • storage.objects.create

Si le compte de service ou l'utilisateur effectuent également des opérations d'importation, il peut être plus pratique d'accorder le rôle IAM Storage Object Admin pour 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.

Exporter des données à partir de Cloud SQL vers un fichier de vidage SQL dans Cloud Storage

Lorsque vous utilisez Cloud SQL pour effectuer une exportation, que ce soit depuis Cloud Console, l'outil de ligne de commande gcloud ou l'API, vous faites appel à l'utilitaire pg_dump en spécifiant les options nécessaires pour garantir la validité du fichier d'exportation obtenu pour sa réimportation dans Cloud SQL.

Vous pouvez également exécuter pg_dump manuellement à l'aide du client psql, si vous effectuez une exportation vers une base de données non gérée par Cloud SQL.

Si vous envisagez d'importer vos données dans Cloud SQL, vous devez suivre les instructions fournies dans la section Exporter des données à partir d'un serveur de base de données externe afin que votre fichier de vidage SQL soit correctement formaté pour Cloud SQL.

Pour exporter des données d'une base de données sur une instance Cloud SQL vers un fichier de vidage SQL dans un bucket Cloud Storage, 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 Exporter.
  4. Dans la section Format de fichier, cliquez sur SQL pour créer un fichier de vidage SQL.
  5. Dans la section Données à exporter, sélectionnez la base de données à utiliser pour l'exportation dans le menu déroulant.
  6. Dans la section Destination, sélectionnez Parcourir pour rechercher un bucket ou un dossier Cloud Storage pour l'exportation.
  7. Cliquez sur Exporter pour démarrer l'exportation.

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. Recherchez le compte de service pour l'instance Cloud SQL à partir de laquelle vous souhaitez exporter. Pour ce faire, exécutez la commande gcloud sql instances describe. Recherchez le champ serviceAccountEmailAddress dans le résultat.
    gcloud sql instances describe INSTANCE_NAME
      
  4. Utilisez gsutil iam pour accorder le rôle IAM storage.objectAdmin au compte de service. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.
  5. Exportez la base de données :
    gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/sqldumpfile.gz \
    --database=DATABASE_NAME_1,[DATABASE_NAME_2…] \
    --table=TABLE \
    --offload
      

    La commande export sql ne contient pas de déclencheurs ni de procédures stockées, mais elle contient des vues. Pour exporter des déclencheurs et/ou des procédures stockées, utilisez l'outil pg_dump.

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

  6. Si vous n'avez pas besoin de conserver le rôle IAM que vous avez défini précédemment, révoquez-le maintenant.

REST v1

  1. Créez un bucket pour l'exportation de la manière suivante :
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    

    Bien que cette étape soit facultative, nous vous recommandons de la suivre pour vous éviter d'ouvrir l'accès à d'autres données.

  2. Attribuez à votre instance le rôle IAM legacyBucketWriter pour votre bucket. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.
  3. Exportez votre base de données :

    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_dump_file : chemin d'accès au conteneur de vidage SQL
    • database_name_1 : nom d'une base de données dans l'instance Cloud SQL
    • database_name_2 : nom d'une base de données dans l'instance Cloud SQL
    • offload : active l'exportation sans serveur. Définissez la valeur sur true pour utiliser l'exportation sans serveur.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

    {
     "exportContext":
       {
          "fileType": "SQL",
          "uri": "gs://bucket_name/path_to_dump_file",
          "databases": ["database_name"]
          "offload": true | false
        }
    }
    

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

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

  4. Si vous n'avez pas besoin de conserver le rôle IAM que vous avez défini précédemment, supprimez-le dès maintenant.
Pour obtenir la liste complète des paramètres de cette requête, consultez la page instances:export.

REST v1beta4

  1. Créez un bucket pour l'exportation de la manière suivante :
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    

    Bien que cette étape soit facultative, nous vous recommandons de la suivre pour vous éviter d'ouvrir l'accès à d'autres données.

  2. 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.
  3. Exportez votre base de données :

    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_dump_file : chemin d'accès au conteneur de vidage SQL
    • database_name_1 : nom d'une base de données dans l'instance Cloud SQL
    • database_name_2 : nom d'une base de données dans l'instance Cloud SQL
    • offload : active l'exportation sans serveur. Définissez la valeur sur true pour utiliser l'exportation sans serveur.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

    {
     "exportContext":
       {
          "fileType": "SQL",
          "uri": "gs://bucket_name/path_to_dump_file",
          "databases": ["database_name"]
          "offload": true | false
        }
    }
    

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

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

  4. Si vous n'avez pas besoin de conserver le rôle IAM que vous avez défini précédemment, révoquez-le maintenant.
Pour obtenir la liste complète des paramètres de cette requête, consultez la page instances:export.

Exporter des données à partir de Cloud SQL vers un fichier CSV dans Cloud Storage

Vous pouvez exporter vos données au format CSV, qui peut être utilisé par d'autres outils et environnements. Les exportations ont lieu au niveau de la base de données. Lors d'une exportation au format CSV, vous pouvez spécifier les schémas à exporter. Tout schéma situé à un niveau inférieur à celui de la base de données peut être exporté.

Pour exporter des données d'une base de données sur une instance Cloud SQL vers un fichier CSV dans un bucket Cloud Storage, 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 Exporter.
  4. Dans la section Emplacement de l'exportation dans Cloud Storage, sélectionnez un bucket ou un dossier Cloud Storage pour votre exportation.
  5. Dans le champ Nom, indiquez un nom pour votre fichier d'exportation et cliquez sur Sélectionner.

    Vous pouvez utiliser l'extension de fichier .gz pour obtenir un fichier d'exportation compressé.

  6. Définissez le Format sur CSV.
  7. Dans la section Emplacement de l'exportation dans Cloud Storage, ajoutez le nom du bucket, du dossier et du fichier que vous souhaitez exporter, ou cliquez sur Parcourir pour rechercher ou créer un bucket, un dossier ou un fichier.

    Si vous cliquez sur Parcourir :

    1. Dans la section Emplacement, sélectionnez un bucket ou un dossier Cloud Storage pour votre exportation.
    2. Dans la zone de texte Nom, saisissez un nom pour le fichier CSV ou, si vous avez déjà créé le fichier, sélectionnez-le dans la liste de la section Emplacement.

      Vous pouvez utiliser une extension de fichier .gz (l'extension complète est .csv.gz) pour compresser votre fichier d'exportation.

    3. Cliquez sur Select (Sélectionner).
  8. Dans la section Format, cliquez sur CSV.
  9. Dans la section Base de données pour l'exportation, sélectionnez le nom de la base de données dans le menu déroulant.
  10. Sous Requête SQL, saisissez une requête SQL pour spécifier la table à partir de laquelle exporter les données.

    Par exemple, pour exporter l'intégralité du contenu de la table entries de la base de données guestbook, vous devez saisir :

    SELECT * FROM guestbook.entries;
    Votre requête doit spécifier une table de la base de données spécifiée ; vous ne pouvez pas exporter une base de données entière au format CSV.
  11. Cliquez sur Exporter pour démarrer l'exportation.
  12. La boîte de dialogue Exporter la base de données ? s'ouvre avec un message indiquant que le processus d'exportation peut prendre une heure ou plus pour les bases de données volumineuses. Pendant l'exportation, la seule opération que vous pouvez effectuer sur l'instance est d'afficher ses informations. Vous ne pouvez pas arrêter l'exportation une fois celle-ci démarrée. Si vous souhaitez lancer une exportation, cliquez sur Exporter. Sinon, cliquez sur Annuler.

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. Recherchez le compte de service pour l'instance Cloud SQL à partir de laquelle vous souhaitez exporter. Pour ce faire, exécutez la commande gcloud sql instances describe. Recherchez le champ serviceAccountEmailAddress dans le résultat.
    gcloud sql instances describe INSTANCE_NAME
    
  4. Utilisez gsutil iam pour accorder le rôle IAM storage.objectAdmin au compte de service. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.
  5. Exportez la base de données :
    gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --offload \
    --query=SELECT_QUERY
    

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

  6. Si vous n'avez pas besoin de conserver le rôle IAM que vous avez défini précédemment, révoquez-le maintenant.

REST v1

  1. Créez un bucket pour l'exportation de la manière suivante :
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    

    Bien que cette étape soit facultative, nous vous recommandons de la suivre pour vous éviter d'ouvrir l'accès à d'autres données.

  2. Attribuez à votre instance le rôle IAM legacyBucketWriter pour votre bucket. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.
  3. Exportez votre base de données :

    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
    • offload : active l'exportation sans serveur. Définissez la valeur sur true pour utiliser l'exportation sans serveur.
    • select_query : requête SQL pour l'exportation

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

    {
     "exportContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "databases": ["database_name"],
          "offload": true | false
          "csvExportOptions":
           {
               "selectQuery":"select_query"
           }
       }
    }
    

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

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

    Vous devez spécifier une seule base de données via la propriété databases, et si la requête "select" spécifie une base de données, celle-ci doit être identique.

  4. 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 obtenir la liste complète des paramètres de cette requête, consultez la page instances:export.

REST v1beta4

  1. Créez un bucket pour l'exportation de la manière suivante :
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    

    Bien que cette étape soit facultative, nous vous recommandons de la suivre pour vous éviter d'ouvrir l'accès à d'autres données.

  2. 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.
  3. Exportez votre base de données :

    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
    • offload : active l'exportation sans serveur. Définissez la valeur sur true pour utiliser l'exportation sans serveur.
    • select_query : requête SQL pour l'exportation

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

    {
     "exportContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "databases": ["database_name"],
          "offload": true | false
          "csvExportOptions":
           {
               "selectQuery":"select_query"
           }
       }
    }
    

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

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

    Vous devez spécifier une seule base de données via la propriété databases, et si la requête "select" spécifie une base de données, celle-ci doit être identique.

  4. Si vous n'avez pas besoin de conserver le rôle IAM que vous avez défini précédemment, révoquez-le maintenant.
Pour obtenir la liste complète des paramètres de cette requête, consultez la page instances:export.

L'exportation au format CSV crée un fichier de sortie au format CSV standard. Si vous avez besoin d'un fichier au format CSV non standard, appliquez l'instruction suivante dans un client psql :

      \copy [table_name] TO '[csv_file_name].csv' WITH
          (FORMAT csv, ESCAPE '[escape_character]', QUOTE '[quote_character]',
          DELIMITER '[delimiter_character]', ENCODING 'UTF8', NULL '[null_marker_string]');
Pour obtenir la liste complète des paramètres de cette requête, consultez la page instances:export.

Exporter des données à partir d'un serveur PostgreSQL sur site à l'aide de pg_dump

Pour exporter une base de données non gérée par Cloud SQL, en vue de son importation ultérieure dans Cloud SQL, utilisez l'utilitaire pg_dump avec les options suivantes :

  • --no-owner

    Les commandes de changement de propriété ne doivent pas être incluses dans le fichier de vidage SQL.

  • --format

    Seul le format SQL plain est compatible avec l'API Cloud SQL.

    Le format custom est autorisé si le fichier de vidage est destiné à être utilisé avec pg_restore.

  • --no-acl

    Cette option est requise si votre fichier de vidage contient des instructions permettant d'accorder ou de révoquer l'adhésion à un rôle SUPERUSER.

En outre, vous devez supprimer tous les éléments suivants :

  • Les instructions liées aux extensions, en cas d'incompatibilité avec Cloud SQL. Reportez-vous à la section Extensions PostgreSQL pour connaître la liste des extensions compatibles.
  • Les instructions CREATE EXTENSION ou DROP EXTENSION faisant référence à plpgsql. Cette extension est préinstallée sur les instances Cloud SQL Postgres.
  • COMMENT ON EXTENSION.

Pour le format de texte brut : à partir d'une ligne de commande, exécutez pg_dump :

pg_dump -U USERNAME --format=plain --no-owner --no-acl DATABASE_NAME \
    | sed -E 's/(DROP|CREATE|COMMENT ON) EXTENSION/-- \1 EXTENSION/g' > SQL_FILE.sql

Pour le format personnalisé : à partir d'une ligne de commande, exécutez pg_dump :

pg_dump -U USERNAME --format=custom --no-owner --no-acl DATABASE_NAME > DATABASE_NAME.dmp

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

Lors de l'importation à l'aide de pg_restore, spécifiez la table de contenu traitée avec l'argument de ligne de commande "--use-list=DATABASE_NAME.toc".

Vérifiez que l'encodage par défaut, tel que déterminé par les paramètres de la base de données, est correct pour vos données. Si nécessaire, vous pouvez remplacer les valeurs par défaut par l'option --encoding.

Pour spécifier une exportation 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_restore pour importer en parallèle.

Pour obtenir de l'aide concernant pg_dump, consultez la documentation de référence sur pg_dump.

Automatiser les opérations d'exportation

Bien que Cloud SQL ne dispose pas d'une méthode intégrée pour automatiser les exportations de base de données, vous pouvez créer votre propre outil d'automatisation à l'aide de plusieurs composants Google Cloud. Pour en savoir plus, consultez ce tutoriel.

Dépannage

Problème Dépannage
L'exportation au format CSV a fonctionné, mais pas l'exportation au format SQL. Les formats CSV et SQL sont exportés de manière différente. Comme le format SQL exporte l'intégralité de la base de données, l'exportation prend probablement plus de temps. Le format CSV vous permet de définir les éléments de la base de données à exporter.

Exportez uniquement les données dont vous avez besoin à l'aide du format CSV.

L'exportation prend trop de temps. Cloud SQL n'est pas compatible avec les opérations synchrones simultanées.

Utilisez le déchargement des exportations. En règle générale, lors du déchargement des exportations, au lieu d'exécuter une exportation sur l'instance source, Cloud SQL lance une instance de déchargement pour effectuer l'exportation. Le déchargement des exportations présente plusieurs avantages, y compris une amélioration des performances sur l'instance source et le déblocage des opérations d'administration pendant l'exportation. Avec le déchargement des exportations, la latence totale peut augmenter en fonction du temps nécessaire à l'affichage de l'instance de déchargement. En règle générale, la latence n'est pas significative pour les exportations de taille raisonnable. Toutefois, si votre exportation est suffisamment petite, vous pouvez constater une augmentation de la latence.

Erreur de création de l'extension Le fichier de vidage contient des références à une extension non compatible.

Modifiez le fichier de vidage pour supprimer les références.

Erreur lors de l'utilisation de pg_dumpall. L'outil nécessite un rôle de super-utilisateur, qui n'est pas accepté dans Cloud SQL pour PostgreSQL.
L'opération d'exportation expire avant d'exporter des données et le message d'erreur Could not receive data from client: Connection reset by peer. s'affiche. Si Cloud Storage ne reçoit aucune donnée dans les délais impartis (généralement environ sept minutes), la connexion est réinitialisée. Il est possible que l'exécution de la requête d'exportation initiale soit trop longue.

Effectuez une exportation manuelle à l'aide de l'outil pg_dump.

Vous souhaitez automatiser les exportations. Cloud SQL ne permet pas d'automatiser les exportations.

Vous pouvez créer votre propre système d'exportation automatisé à l'aide de produits Google Cloud tels que Cloud Scheduler, Pub/Sub et Cloud Functions, de manière semblable à cet article sur l'automatisation des sauvegardes.

Étape suivante