Exporter un fichier SQL

Cette page explique comment exporter des données de clusters AlloyDB pour PostgreSQL dans des fichiers de vidage SQL.

Pour savoir comment migrer une base de données entière d'un serveur de base de données compatible vers une nouvelle instance AlloyDB, consultez Migrer une base de données vers AlloyDB à l'aide de Database Migration Service. Si vous souhaitez créer une nouvelle instance à partir du fichier exporté, envisagez de restaurer un cluster à partir d'une sauvegarde stockée.

Vous pouvez annuler l'exportation de données à partir de clusters AlloyDB pour PostgreSQL. Pour en savoir plus, consultez Annuler l'exportation de données.

Avant de commencer

  • Avant de commencer une opération d'exportation, n'oubliez pas que les opérations d'exportation utilisent des ressources de base de données, mais qu'elles n'interfèrent pas avec les opérations de base de données standards, sauf si l'instance est sous-provisionnée.
  • Des frais de transfert de données interrégionaux s'appliquent lorsque le bucket cible se trouve dans une région différente de celle du cluster source. Pour en savoir plus, consultez Tarifs d'AlloyDB pour PostgreSQL.
  • La compression est activée si le nom de l'objet se termine par l'extension .gz. L'objet est ensuite exporté au format .gz vers Cloud Storage.
  • Plusieurs opérations d'exportation peuvent s'exécuter en parallèle.

Rôles et autorisations requis pour l'exportation à partir d'AlloyDB

Pour exporter des données d'AlloyDB vers Cloud Storage, l'utilisateur qui lance l'exportation doit disposer de l'un des rôles Identity and Access Management (IAM) suivants :

De plus, le compte de service du cluster AlloyDB doit disposer de l'un des rôles suivants sur le bucket Cloud Storage :

  • Le rôle IAM storage.objectAdmin ou storage.objectCreator
  • Un rôle personnalisé comprenant l'autorisation storage.objects.create

Pour obtenir de l'aide sur les rôles IAM, consultez Identity and Access Management.

Exporter des données AlloyDB vers un fichier de dump SQL

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

Pour exporter des données d'une base de données sur un cluster AlloyDB vers un fichier de vidage SQL dans un bucket Cloud Storage, procédez comme suit :

gcloud

  1. Assurez-vous qu'il existe un bucket Cloud Storage pour stocker le fichier exporté ou créez-en un.
  2. Utilisez le format fourni pour identifier le compte de service du projet à partir duquel vous effectuez l'exportation. Le format du compte de service est le suivant :

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    Accordez au compte de service des autorisations sur le bucket Cloud Storage pour l'opération d'exportation.

  3. Utilisez gcloud storage buckets add-iam-policy-binding pour accorder le rôle IAM storage.objectAdmin au compte de service. Pour savoir comment attribuer des rôles aux buckets, consultez Définir et gérer des stratégies IAM sur des buckets.

    Si vous exportez le fichier dans un bucket Cloud Storage existant que vous n'avez pas créé, vous devrez peut-être disposer d'autorisations IAM supplémentaires pour pouvoir attribuer des rôles sur le bucket. Pour en savoir plus, consultez Rôles requis.

  4. Exportez la base de données vers votre bucket Cloud Storage. Vous trouverez ci-dessous la liste des options permettant d'exporter des données au format de vidage SQL :

    • --async (facultatif) : renvoie immédiatement une réponse, sans attendre la fin de l'opération en cours.
    • --tables (facultatif) : tables à exporter.
    • --schema-only (facultatif) : si cette option est définie, seul le schéma est exporté.
    • --clean-target-objects (facultatif) : si cette option est définie, les commandes de sortie permettent de DROP tous les objets de base de données vidés avant de générer les commandes permettant de les créer.
    • --if-exist-target-objects (facultatif) : si cette option est définie, utilisez les commandes DROP ... IF EXISTS pour vérifier l'existence de l'objet avant de le supprimer en mode --clean-target-objects.

    Pour utiliser ces fonctionnalités, incluez ces options dans la commande gcloud. Si vous ne souhaitez exporter que les définitions d'objets (schéma) et aucune donnée, utilisez l'option –-schema-only. Pour spécifier les tables à exporter, utilisez l'option --tables=TABLE_NAMES. Vous pouvez spécifier des valeurs de noms de tables séparées par une virgule ou des caractères génériques pour spécifier plusieurs tables.

    Sinon, supprimez ces paramètres de la commande suivante :

    gcloud alloydb clusters export CLUSTER_NAME
      --region=REGION
      --database=DATABASE_NAME
      --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME"
      --tables=TABLE_NAMES
      --schema-only
      --clean-target-objects
      --if-exist-target-objects
      --sql

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

    Pour en savoir plus sur l'utilisation de la commande alloydb clusters export, consultez la alloydb clusters export page de référence de la commande.

  5. 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. Assurez-vous qu'il existe un bucket Cloud Storage pour stocker le fichier exporté ou créez-en un :

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
  2. Utilisez le format du compte de service pour identifier le compte de service du projet à partir duquel vous effectuez l'exportation.

    Le format du compte de service est le suivant :

     service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    Accordez au compte de service des autorisations sur le bucket Cloud Storage pour l'opération d'exportation.

  3. Utilisez gcloud storage buckets add-iam-policy-binding pour accorder le rôle IAM storage.objectAdmin au compte de service. Pour savoir comment attribuer des rôles aux buckets, consultez Définir et gérer des stratégies IAM sur des buckets.

    Si vous exportez le fichier dans un bucket Cloud Storage existant que vous n'avez pas créé, vous devrez peut-être disposer d'autorisations IAM supplémentaires pour pouvoir attribuer des rôles sur le bucket. Pour en savoir plus, consultez Rôles requis.

  4. Exportez votre base de données.

    Utilisez la méthode HTTP et l'URL suivantes :

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export

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

    • PROJECT_ID : ID du projet.
    • REGION : région dans laquelle le cluster AlloyDB est déployé.
    • CLUSTER_ID : ID du cluster.
    • BUCKET_NAME : nom du bucket Cloud Storage.
    • PATH_TO_SQL_FILE : chemin d'accès au fichier de dump SQL.
    • DATABASE_NAME : nom d'une base de données dans l'instance AlloyDB.
    • TABLES : tables à exporter.
    • SCHEMA_ONLY : si la valeur est true, seul le schéma est exporté.
    • CLEAN_TARGET_OBJECTS : si la valeur est true, les commandes de sortie permettent de DROP tous les objets de base de données vidés avant de générer les commandes permettant de les créer.
    • IF_EXIST_TARGET_OBJECTS : si la valeur est true, utilisez DROP ... IF EXISTS commandes pour vérifier l'existence de l'objet avant de le supprimer en mode clean_target_objects.

    Pour utiliser ces fonctionnalités, définissez les valeurs de ces paramètres sur true. Sinon, définissez leurs valeurs sur false. Si vous ne souhaitez exporter que les définitions d'objets (schéma) et aucune donnée, utilisez l'option schema_only. Pour spécifier les tables à exporter, utilisez le champ tables. Vous pouvez sélectionner plusieurs tables en fournissant une liste de noms de tables séparés par une virgule ou en écrivant des caractères génériques dans le modèle.

    Corps JSON de la requête :

    {
      "gcs_destination": {
        "uri": "gs://BUCKET_NAME/PATH_TO_SQL_FILE"
      },
      "database": "DATABASE_NAME",
      "sql_export_options": {
        "schema_only": true,
        "tables": [
         "TABLE1",
         "TABLE2"
        ],
        "clean_target_objects": false,
        "if_exist_target_objects": true
      }
    }
    

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

    curl (Linux, macOS ou Cloud Shell)

    Enregistrez le corps de la requête dans un fichier nommé request.json et exécutez la commande suivante :

       curl -X POST \
             -H "Authorization: Bearer $(gcloud auth print-access-token)" \
             -H "Content-Type: application/json; charset=utf-8" \
             -d @request.json \
             "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"
       

    PowerShell (Windows)

    Enregistrez le corps de la requête dans un fichier nommé request.json et exécutez la commande suivante :

       $cred = gcloud auth print-access-token
       $headers = @{ "Authorization" = "Bearer $cred" }
    
       Invoke-WebRequest `
         -Method POST `
         -Headers $headers `
         -ContentType: "application/json; charset=utf-8" `
         -InFile request.json `
       -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
       

    Vous recevez une réponse JSON de ce type :

    Réponse

    {
      "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
        "createTime": "2024-09-17T06:05:31.244428646Z",
        "target": "projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID",
        "verb": "export",
        "requestedCancellation": false,
        "apiVersion": "v1"
      },
      "done": false
    }
    
  5. 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 pour cette requête, consultez clusters:export.

Étape suivante