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 dont vous avez besoin. 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 de 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 garantir que ces champs seront importés correctement.
  • --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.
  • --routines Pour inclure des procédures et des fonctions stockées.
  • Lorsque vous utilisez la version 8 ou ultérieure de mysqldump pour exporter des versions de bases de données MySQL antérieures à la version 8:
    --column-statistics=0

    Cet indicateur 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 prise en charge.
  • 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 sur le serveur de base de données source à inclure dans le vidage, séparées par des espaces. Utilisez la commande MySQL SHOW DATABASES pour lister vos bases de données.
[BUCKET_NAME] Bucket Cloud Storage créé par l'utilisateur et utilisé pour stocker le fichier de dump (par exemple, replica-bucket).
[DUMP_FILENAME] Nom du fichier de dump, se terminant par une extension de fichier .gz (par exemple, source-database.sql.gz).