Exporter une base de données MySQL à l'aide de mysqldump

Vous pouvez exécuter l'utilitaire mysqldump directement sur votre base de données MySQL, en utilisant les options de votre choix. Toutefois, si vous exportez des données pour les importer dans une base de données Cloud SQL, utilisez l'utilitaire mysqldump avec les options suivantes :

  • --databases : spécifiez une liste explicite des bases de données à exporter. Cette liste ne doit pas contenir les bases de données système (sys, mysql, performance_schema et information_schema).
  • --hex-blob : si votre base de données contient des champs binaires, vous devez utiliser cette option pour vous assurer que vos champs binaires sont importés correctement.
  • --single-transaction : démarre une transaction avant l'exécution. Au lieu de verrouiller l'ensemble de la base de données, cette option permet à mysqldump de lire la base de données dans son état actuel, ce qui permet d'obtenir un vidage de données cohérent.
  • --routines : incluez les procédures et les fonctions stockées.
  • Lorsque vous utilisez la version 8 ou ultérieure de mysqldump pour exporter des bases de données MySQL antérieures à la version 8:
    --column-statistics=0

    Cette option supprime la table COLUMN_STATISTICS de l'exportation de la base de données pour éviter l'erreur Unknown table 'COLUMN_STATISTICS' in information_schema (1109). Pour en savoir plus, consultez la section Diagnostiquer les problèmes.

Nous vous recommandons également d'utiliser les options suivantes :

  • --no-autocommit
  • --default-character-set=utf8mb4
  • --master-data

À partir d'une machine ayant une connectivité réseau à votre serveur MySQL, exécutez la commande suivante :

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --master-data=1  \
        --single-transaction \
        --routines \
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

Si la source de la migration est un service de base de données relationnelle (RDS) pour MySQL :

  • La propriété master-data n'est pas compatible.
  • Si votre serveur de base de données source est compatible avec GTID, utilisez la propriété --set-gtid-purged=on. Sinon, n'utilisez pas cette propriété.
  • Si vous utilisez un vidage manuel pour migrer vos données, effectuez la migration avec GTID activé.

Voici un exemple de cette commande :

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --set-gtid-purged=on \
        --single-transaction \
        --routines \ 
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

En outre, vous devriez configurer les instances RDS de sorte qu'elles conservent les binlogs plus longtemps. Voici un exemple de cette commande :

    # Sets the retention period to one week.
    call mysql.rds_set_configuration('binlog retention hours', 168);

Remplacez [PROPERTIES_IN_BRACKETS] par les valeurs suivantes :

Propriété Valeur
[SOURCE_ADDR] Adresse IPv4 ou nom d'hôte du serveur de base de données source.
[SOURCE_PORT] Port du serveur de base de données source.
[USERNAME] Compte utilisateur MySQL.
[DBS] Liste des bases de données du serveur de base de données source à inclure dans le vidage, séparées par des espaces. Utilisez la commande MySQL SHOW DATABASES pour répertorier vos bases de données.
[BUCKET_NAME] Bucket dans Cloud Storage créé par l'utilisateur et utilisé pour stocker le fichier de dump (par exemple, replica-bucket).
[DUMP_FILENAME] Nom du fichier de vidage, se terminant par une extension .gz (par exemple, source-database.sql.gz).

Étape suivante

Pour obtenir une procédure de migration complète et détaillée, consultez Premiers pas avec les migrations Cloud SQL pour MySQL.