Exporter un fichier SQL

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

Pour savoir comment migrer une base de données entière à partir 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 exportez des données pour créer une instance à partir du fichier exporté, envisagez de restaurer un cluster à partir d'une sauvegarde stockée.

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

Avant de commencer

  • Avant de lancer une opération d'exportation, gardez à l'esprit 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 la page 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 IAM (Identity and Access Management) suivants:

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

  • Le rôle IAM storage.objectAdmin
  • Un rôle personnalisé, y compris les autorisations storage.objects.create

Pour obtenir de l'aide sur les rôles IAM, consultez la page 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'utilitaire 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. Créez un bucket Cloud Storage.
  2. Utilisez le format fourni pour identifier le compte de service du projet à partir duquel vous exportez. 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 pour 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 obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.

  4. Exportez la base de données vers votre bucket Cloud Storage. La liste suivante présente les options d'exportation de 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 défini, n'exportez que le schéma.
    • --clean-target-objects (facultatif): si défini, génère les commandes de sortie vers DROP pour tous les objets de base de données mis en page avant de générer les commandes de création.
    • --if-exist-target-objects (facultatif): si défini, utilisez des commandes DROP ... IF EXISTS pour vérifier l'existence de l'objet avant de le placer en mode --clean-target-objects.

    Pour utiliser ces fonctionnalités, incluez ces options dans la commande gcloud. Si vous souhaitez exporter uniquement les définitions d'objets (schéma) et aucune donnée, utilisez l'indicateur –-schema-only. Pour spécifier les tables à exporter, utilisez l'indicateur --tables=TABLE_NAMES. Vous pouvez spécifier des valeurs de noms de tables ou de modèles de caractères génériques séparés par une virgule 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'utilitaire pg_dump.

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

  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. Créez un bucket pour l'exportation de la manière suivante :

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

    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 pour 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 obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.

  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 ci-dessous, 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, n'exportez que le schéma.
    • CLEAN_TARGET_OBJECTS: si true, les commandes de sortie DROP tous les objets de base de données vidés avant de générer les commandes de création.
    • IF_EXIST_TARGET_OBJECTS: si la valeur est true, utilisez des commandes DROP ... IF EXISTS pour vérifier l'existence de l'objet avant de le placer 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 souhaitez exporter uniquement les définitions d'objets (schéma) et aucune donnée, utilisez l'indicateur 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 format.

    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, puis 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, puis 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 semblable à celle-ci:

    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 de la requête, consultez clusters:export.

Étape suivante