Exporter un fichier SQL

Pour sauvegarder les schémas et les données de base de données sous forme de script en texte brut d'instructions SQL, vous pouvez exporter les données des clusters AlloyDB pour PostgreSQL vers un fichier de dump SQL dans un bucket Cloud Storage.

Pour en savoir plus sur la migration d'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 instance à partir du fichier exporté, envisagez de restaurer un cluster à partir d'une sauvegarde stockée.

Vous pouvez annuler l'exportation de données depuis des clusters AlloyDB pour PostgreSQL. Pour en savoir plus, consultez Annuler une opération d'exportation.

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égional 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 depuis 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 sur le bucket Cloud Storage :

  • Le rôle IAM storage.objectAdmin ou storage.objectCreator
  • Un rôle personnalisé, y compris l'autorisation 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 dump 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 gcloud storage buckets add-iam-policy-binding pour accorder le rôle IAM storage.objectAdmin au compte de service AlloyDB pour le bucket. Le format du compte de service est le suivant :

    service-PROJECT_NUMBER@gcp-sa-alloydb.

    Pour savoir comment attribuer des rôles sur des buckets, consultez Définir et gérer des stratégies IAM sur des buckets.

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

  3. Exportez la base de données vers votre bucket Cloud Storage. Voici les 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 à partir desquelles exporter.
    • --schema-only (facultatif) : si cette option est définie, n'exportez que le schéma.
    • --clean-target-objects (facultatif) : si cette option est définie, les commandes de sortie sont envoyées à DROP pour tous les objets de base de données sauvegardés avant d'envoyer les commandes pour 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 souhaitez exporter uniquement des 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 séparées par une virgule pour les noms de table ou des modèles de 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 gcloud 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 plus d'informations sur l'utilisation de la commande gcloud alloydb clusters export, consultez la page de référence de la commande gcloud alloydb clusters export.

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

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 gcloud storage buckets add-iam-policy-binding pour accorder le rôle IAM storage.objectAdmin au compte de service AlloyDB pour le bucket. Le format du compte de service est le suivant :

     service-PROJECT_NUMBER@gcp-sa-alloydb.

    Pour savoir comment attribuer des rôles sur des buckets, consultez Définir et gérer des stratégies IAM sur des buckets.

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

  3. 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 à partir desquelles exporter.
    • SCHEMA_ONLY : si la valeur est true, n'exportez que le schéma.
    • CLEAN_TARGET_OBJECTS : si la valeur est true, les commandes de sortie sont envoyées à DROP pour tous les objets de base de données sauvegardés avant de générer les commandes permettant de les créer.
    • IF_EXIST_TARGET_OBJECTS : si la valeur est true, 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, définissez les valeurs de ces paramètres sur true. Sinon, définissez leurs valeurs sur false. Si vous souhaitez exporter uniquement des 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, 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 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
    }
    
  4. Si vous n'avez pas besoin de conserver le rôle IAM que vous avez défini précédemment, supprimez-le.

Pour obtenir la liste complète des paramètres de la requête, consultez clusters.export.

Étapes suivantes