Exporter des données depuis Cloud SQL

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.

Les exportations aux formats CSV et mysqldump se comportent de la même manière dans Cloud SQL que si elles provenaient d'une autre base de données MySQL.

Avant de commencer

Assurez-vous d'avoir configuré les rôles et autorisations requis. Pour exporter des données vers Cloud Storage, le compte de service ou l'utilisateur de l'instance doit disposer des éléments suivants :

  • Soit le rôle Éditeur Cloud SQL, soit un rôle personnalisé qui inclut l'autorisation cloudsql.instances.export.
  • Le rôle IAM roles/storage.legacyBucketWriter.
  • Si le compte de service ou l'utilisateur effectue également des opérations d'importation, accordez l'autorisation cloudsql.instances.import et le rôle IAM roles/storage.legacyObjectReader.

Pour obtenir de l'aide sur les rôles IAM, consultez la page Cloud Identity and Access Management pour Cloud Storage.

Vous trouverez le nom du compte de service de l'instance dans Google Cloud Console sur la page "Présentation" de votre instance. Pour vérifier les rôles de votre bucket Cloud Storage, servez-vous de l'outil gsutil pour inspecter le bucket :

gsutil iam get gs://[BUCKET_NAME]

En savoir plus sur l'utilisation d'IAM avec des buckets.

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

Pour créer un fichier de vidage SQL, exportez les données de Cloud SQL vers Cloud Storage. Une fois que le fichier se trouve dans Cloud Storage, vous pouvez l'importer dans une autre base de données Cloud SQL. Vous pouvez également télécharger des données depuis Cloud Storage vers votre environnement local si vous souhaitez y accéder localement.

L'exportation depuis Cloud SQL utilise l'utilitaire mysqldump avec les options --single-transaction et --hex-blob. Avec l'option --single-transaction, mysqldump lance une transaction avant son exécution. Plutôt que de verrouiller l'ensemble de la base de données, cela permet à mysqldump de lire la base de données dans son état actuel, ce qui permet un vidage de données cohérent.

Si le fichier de vidage SQL contient des clauses DEFINER (views, triggers, stored_procedures, etc…), selon l'ordre d'exécution de ces instructions, l'utilisation de ce fichier pour l'importation peut échouer. Apprenez-en plus sur l'utilisation de DEFINER et les solutions de contournement potentielles dans 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. Accédez à la page "Instances Cloud SQL" dans Google Cloud Console.

    Accéder à la page Instances Cloud SQL

  2. Cliquez sur l'instance à partir de laquelle vous souhaitez exporter des données pour ouvrir la page Présentation correspondante.
  3. Dans la barre de boutons, cliquez sur EXPORTER.
  4. Sous Format de fichier, cliquez sur SQL pour créer un fichier de vidage SQL.
  5. Pour exporter des bases de données spécifiques, sous Données à exporter, cliquez sur Une ou plusieurs bases de données dans cette instance.
  6. Dans le menu déroulant, sélectionnez les bases de données à partir desquelles vous souhaitez exporter les données.
  7. Sous Destination, sélectionnez Parcourir pour rechercher un bucket ou un dossier Cloud Storage pour l'exportation.
  8. 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 un objet.

  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] --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 mysqldump.

    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.

API 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 ci-dessous, 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. Accédez à la page "Instances Cloud SQL" dans Google Cloud Console.

    Accéder à la page Instances Cloud SQL

  2. Cliquez sur l'instance pour ouvrir la page Présentation correspondante.
  3. Cliquez sur EXPORTER.
  4. Sous 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. Cliquez sur Afficher les options avancées.
  8. Sous Base de données, sélectionnez le nom de la base de données dans le menu déroulant.
  9. 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.

  10. Cliquez sur Exporter pour démarrer l'exportation.
  11. 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 un objet.

  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.

API 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 ci-dessous, 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 :

    Si votre requête "select" spécifie une base de données, la propriété databases est ignorée.

  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 au format CSV revient à exécuter l'instruction SQL suivante :

      SELECT [QUERY] INTO OUTFILE ... CHARACTER SET 'utf8mb4'
            FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
            ESCAPED BY '\"' LINES TERMINATED BY '\n'

Pour obtenir la liste complète des paramètres de cette requête, consultez la page instances:export.

Exporter des données de votre serveur MySQL local vers un fichier CSV

Pour exporter une base de données MySQL qui n'est pas gérée par Cloud SQL vers un fichier CSV, exécutez la commande suivante pour l'importer ultérieurement dans Cloud SQL :

mysql --host=[INSTANCE_IP] --user=[USER_NAME] --password [DATABASE] \
-e " SELECT * FROM [TABLE] INTO OUTFILE '[FILE_NAME]' CHARACTER SET 'utf8mb4'
     FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' "

Exporter des données de votre serveur MySQL local à l'aide de mysqldump

Si vous exportez des données à partir d'une base de données MySQL sur site pour les importer dans une base de données Cloud SQL, vous devez utiliser l'utilitaire mysqldump avec les options suivantes :

  • --databases Vous devez utiliser l'option --databases pour spécifier explicitement une liste de bases de données à exporter. Cette liste ne doit pas contenir la base de données système mysql.
  • --hex-blob Si la base de données contient des champs binaires, vous devez utiliser cette option pour garantir que ces champs seront importés correctement.
  • --set-gtid-purged=OFF Les informations GTID ne doivent pas être incluses dans le fichier de vidage SQL, et la journalisation binaire ne doit pas être désactivée par le fichier de vidage SQL. (Non requis pour MySQL 5.5 ni pour la réplication externe.)
  • --single-transaction Démarre une transaction avant l'exécution. Plutôt que de verrouiller l'ensemble de la base de données, cela permet à mysqldump de lire la base de données dans son état actuel, ce qui permet un vidage de données cohérent.

Configuration standard

À partir d'une ligne de commande, exécutez mysqldump :

mysqldump --databases [DATABASE_NAME] -h [INSTANCE_IP] -u [USERNAME] -p \
--hex-blob --single-transaction --set-gtid-purged=OFF \
--default-character-set=utf8mb4 > [SQL_FILE].sql

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

Réplication externe

Pour créer un fichier de vidage à utiliser dans une configuration de serveur externe, consultez la page Duplication depuis un serveur externe.

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

Cliquez sur les liens du tableau pour en savoir plus :

Pour ce problème... Le problème peut être... Essayez ce qui suit...
Impossible d'afficher l'état de l'opération. L'interface utilisateur n'affiche que les opérations réussies ou échouées. Exécutez ces commandes de base de données pour en savoir plus.
Le message 408 Error (Timeout) s'affiche pendant l'exportation. L'exportation au format SQL peut prendre beaucoup de temps en fonction de la taille de la base de données et du contenu exporté. Effectuez plusieurs exportations CSV pour réduire la taille de chaque opération.
L'exportation au format CSV a fonctionné, mais pas l'exportation au format SQL. L'exportation au format SQL est plus susceptible de générer des problèmes de compatibilité avec Cloud SQL. Exportez uniquement les données dont vous avez besoin au 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 savoir plus
Error 1412: Table definition has changed La table a été changée lors de l'exportation. Supprimez toutes les instructions de changement de table de l'opération de vidage.
La connexion se ferme lors de l'exportation. La requête doit produire des données dans les sept premières minutes. Testez la requête manuellement. En savoir plus
Erreur inconnue lors de l'exportation. Problème de bande passante possible. Assurez-vous que l'instance et le bucket Cloud Storage se trouvent dans la même région.
Vous souhaitez automatiser les exportations. Cloud SQL ne permet pas d'automatiser les exportations. Créez votre propre pipeline pour exécuter cette fonctionnalité. En savoir plus
Message d'erreur : Access denied; you need (at least one of) the SUPER privilege(s) for this operation. Il est possible qu'un événement, une vue, une fonction ou une procédure du fichier de vidage utilise un super-utilisateur@localhost (tel que root@localhost). Cette méthode n'est pas compatible avec Cloud SQL. En savoir plus sur l'utilisation de DEFINER et sur les solutions potentielles dans Cloud SQL.

Impossible d'afficher l'état de l'opération

Vous ne pouvez pas voir l'état d'une opération en cours.

Cause possible

Une fois l'opération terminée, Google Cloud Console ne signale que les réussites ou les échecs, mais n'est pas conçu pour renvoyer des avertissements.

Solutions possibles

Connectez-vous à la base de données et exécutez SHOW WARNINGS.


Erreur 408 (Expiration du délai) lors de l'exportation

Le message d'erreur 408 Error (Timeout) s'affiche lors de l'exécution d'une tâche d'exportation dans Cloud SQL.

Cause possible

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.

Solutions possibles

Utilisez le format CSV et exécutez plusieurs tâches d'exportation plus petites pour réduire la taille et la durée de chaque opération.


Échec de l'exportation au format CSV

L'exportation au format CSV a fonctionné, mais pas l'exportation au format SQL.

Cause possible

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.

Solutions possibles

Exportez uniquement les données dont vous avez besoin au format CSV.


L'exportation prend trop de temps.

L'exportation prend trop de temps et bloque les autres opérations.

Cause possible

Cloud SQL n'est pas compatible avec les opérations synchrones simultanées.

Solutions possibles

Essayez d'exporter des ensembles de données plus petits.


mysqldump : Erreur 1412 : La définition de la table a changé

Le message d'erreur mysqldump: Error 1412: Table definition has changed, retry transaction when dumping the table s'affiche.

Cause possible

Au cours du processus d'exportation, une modification a été apportée à la table.

Solutions possibles

La transaction de vidage peut échouer si vous utilisez les instructions ci-dessous lors de l'opération d'exportation :

  • ALTER TABLE
  • CREATE TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE
Supprimez l'une de ces instructions de l'opération de vidage.


Fermeture de la connexion lors de l'exportation

La connexion se ferme lors de l'exportation.

Cause possible

La connexion à Cloud Storage expire peut-être parce que la requête exécutée lors de l'exportation ne produit aucune donnée dans les sept minutes suivant le lancement de l'exportation.

Solutions possibles

Testez la requête manuellement en vous connectant depuis n'importe quel client et en envoyant le résultat de votre requête à STDOUT à l'aide de la commande ci-dessous :

COPY (INSERT_YOUR_QUERY_HERE) TO STDOUT WITH ( FORMAT csv, DELIMITER ',', ENCODING 'UTF8', QUOTE '"', ESCAPE '"' )

Ce comportement est normal, car le client est censé commencer à envoyer des données immédiatement après le lancement de l'exportation. Une connexion maintenue ouverte sans envoyer de données finit par s'interrompre, ce qui entraîne l'échec de l'exportation et laisse l'opération dans un état d'incertitude. En outre, le message d'erreur de gcloud suivant s'affiche :

operation is taking longer than expected


Erreur inconnue lors de l'exportation

Le message d'erreur Unknown error s'affiche lorsque vous tentez d'exporter une base de données vers un bucket Cloud Storage.

Cause possible

Le transfert peut échouer en raison d'un problème de bande passante.

L'instance Cloud SQL peut se trouver dans une région différente de celle du bucket Cloud Storage. La lecture et l'écriture de données d'un continent à l'autre impliquent une utilisation importante du réseau, pouvant entraîner ce type de problèmes intermittents. Vérifiez les régions de votre instance et de votre bucket.

Solutions possibles

Utiliser l'exportation sans serveur pour décharger l'exportation de l'instance principale.

Vous souhaitez automatiser les exportations

Vous souhaitez automatiser les exportations.

Cause possible

Cloud SQL ne permet pas d'automatiser les exportations.

Solutions possibles

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.


Erreur système de type ERROR_RDBMS

Le message d'erreur [ERROR_RDBMS] system error occurred s'affiche.

Cause possible

  • Il se peut que l'utilisateur ne dispose pas de toutes les autorisations Cloud Storage dont il a besoin.
  • La table de base de données n'existe peut-être pas

Solutions possibles

  1. Vérifiez que vous disposez tout au moins des autorisations WRITER sur le bucket et READER sur le fichier d'exportation. Pour en savoir plus sur la configuration du contrôle d'accès dans Cloud Storage, consultez la page Créer et gérer des listes de contrôle d'accès.
  2. Assurez-vous que la table existe. Si tel est le cas, vérifiez que vous disposez des autorisations appropriées sur le bucket.

Accès refusé. Vous avez besoin d'au moins un des privilèges SUPER pour cette opération

L'erreur Access denied; you need (at least one of) the SUPER privilege(s) for this operation s'affiche.

Cause possible

Il est possible qu'un événement, une vue, une fonction ou une procédure du fichier de vidage utilise un super-utilisateur@localhost (tel que root@localhost). Cette méthode n'est pas compatible avec Cloud SQL.

Solutions possibles

Reportez-vous à ce document pour savoir comment importer une base de données avec des clauses DEFINER.

Étape suivante