Utiliser un fichier de vidage pour configurer la réplication à partir de bases de données externes

Cette page décrit le processus de configuration de la réplication lorsque vous disposez d'un fichier de vidage créé à partir de votre serveur externe.

Vous devez suivre intégralement la procédure présentée sur cette page. Lorsque vous avez terminé, vous pouvez administrer et surveiller l'instance de représentation source de la même manière que n'importe quelle autre instance Cloud SQL.

Avant de commencer

Avant de commencer, vous devez avoir configuré le serveur externe, créé l'instance de représentation source et configuré l'instance dupliquée Cloud SQL.

Mettre à jour les autorisations pour l'utilisateur de réplication

L'utilisateur de réplication sur le serveur externe est configuré pour accepter les connexions provenant de n'importe quel hôte (%). Vous devez mettre à jour ce compte utilisateur afin qu'il ne puisse être utilisé qu'avec l'instance dupliquée Cloud SQL. Ouvrez un terminal sur le serveur externe, puis saisissez les commandes suivantes :

Client mysql

    UPDATE mysql.user
      SET Host='NEW_HOST'
      WHERE Host='OLD_HOST'
      AND User='USERNAME';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'GCP_USERNAME'@'HOST';
    FLUSH PRIVILEGES;

exemple

    UPDATE mysql.user
      SET Host='192.0.2.0'
      WHERE Host='%'
      AND User='replicationUser';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'gcp_user'@'gmail.com';
    FLUSH PRIVILEGES;
Valeur Description
NEW_HOST Indiquez l'adresse IP sortante de l'instance dupliquée Cloud SQL.
OLD_HOST Valeur actuelle attribuée à Host que vous souhaitez modifier.
USERNAME Compte utilisateur de réplication sur le serveur externe.
GCP_USERNAME Nom d'utilisateur du compte utilisateur Google Cloud Platform (GCP).
HOST Le nom d'hôte du compte utilisateur Google Cloud Platform (GCP).

Vérifier les paramètres de réplication

Une fois la configuration terminée, assurez-vous que l'instance dupliquée Cloud SQL peut effectuer la réplication à partir du serveur externe.

Tout d'abord, vérifiez que vos paramètres de synchronisation externe sont corrects. Pour ce faire, utilisez les commandes ci-dessous pour vérifier :

  • La connectivité entre l'instance dupliquée Cloud SQL et le serveur externe
  • Les privilèges de l'utilisateur de réplication
  • Compatibilité des versions
  • L'instance dupliquée Cloud SQL n'est pas déjà en cours de réplication
  • Les binlogs sont activés sur le serveur externe
  • Un identifiant de transaction global (GTID) est activé

Ouvrez un terminal et saisissez les commandes suivantes pour vérifier que les paramètres de synchronisation externe sont corrects :

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "skipVerification": "SKIP_VERIFICATION"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/verifyExternalSyncSettings

exemple

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
Valeur Description
SYNC_MODE verifyExternalSyncSettings vérifie que vous pouvez maintenir la synchronisation de l'instance dupliquée Cloud SQL avec le serveur externe une fois la réplication configurée. Les modes de synchronisation incluent EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE et OFFLINE.
SKIP_VERIFICATION Indique si l'étape de validation intégrée doit être ignorée ou pas avant de synchroniser vos données. Recommandé uniquement si vous avez déjà validé vos paramètres de réplication.
PROJECT_ID ID de votre projet dans Google Cloud.
REPLICA_INSTANCE ID de votre instance dupliquée Cloud SQL.

Exporter votre base de données vers un bucket Cloud Storage

Vous pouvez renseigner une instance dupliquée Cloud SQL avec un fichier mysqldump situé dans un bucket Cloud Storage. Les conditions suivantes s'appliquent :

  • Vous devez vous servir de l'utilitaire mysqldump fourni avec MySQL.
  • Pendant l'exécution de mysqldump, n'effectuez aucune opération LDD sur le serveur externe. Cela pourrait entraîner des incohérences dans le fichier d'exportation.

Pour exporter votre base de données vers un bucket Cloud Storage, procédez comme suit:

  1. Dans Google Cloud, créez un bucket Cloud Storage.
  2. Ouvrez un terminal à l'aide d'un client qui se connecte au serveur de base de données externe et exécutez la commande suivante.

mysqldump

    mysqldump \
        --host=EXTERNAL_HOST \
        --port=EXTERNAL_PORT \
        --user=USERNAME\
        --password=PASSWORD \
        --databases=DATABASE_LIST  \
        --hex-blob \
        SOURCE_DATA  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --set-gtid-purged=on \
        ADD_DROP_TABLE \
        ROUTINES \
        COMPRESS \
        GZIP \
        | gsutil cp - gs://BUCKET/DUMP_FILENAME

exemple

    mysqldump \
        --host=192.0.2.1 \
        --port=3306 \
        --user=replicationUser \
        --password \
        --databases guestbook journal \
        --hex-blob \
        --master-data=1 \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --compress \
        | gzip \
        | gsutil cp - gs://replica-bucket/external-database.sql.gz
Valeur Description
EXTERNAL_HOST Adresse IPv4 ou DNS du serveur externe.
EXTERNAL_PORT Port du serveur externe. Si le serveur externe est hébergé sur Cloud SQL, il s'agit de 3306.
USERNAME Nom du compte utilisateur de réplication ou du compte utilisateur sur le serveur externe disposant des autorisations de lecture sur la base de données.
PASSWORD Mot de passe utilisateur de la réplication.
DATABASE_LIST Liste de toutes les bases de données du serveur externe, séparées par des espaces, à l'exception des bases de données système (sys, mysql, performance_schema et information_schema). Utilisez la commande MySQL SHOW DATABASES pour répertorier vos bases de données.
SOURCE_DATA Si vous utilisez une version antérieure de MySQL à la version 8.0.26, définissez la valeur de ce paramètre sur --master-data. Pour les versions de MySQL 8.0.26 ou ultérieures, définissez la valeur de ce paramètre sur --source-data.
ADD_DROP_TABLE Si vous souhaitez ajouter une instruction DROP TABLE avant chaque instruction CREATE TABLE, ajoutez --add-drop-table.
ROUTINES Si vous souhaitez afficher les routines stockées, telles que les procédures et les fonctions, dans le résultat des bases de données vidées, incluez --routines.
COMPRESS Si vous souhaitez compresser toutes les informations envoyées entre l'instance dupliquée Cloud SQL et le serveur externe, utilisez --compress.
GZIP Si vous souhaitez compresser davantage le fichier de vidage, utilisez | gzip. Si votre base de données contient des données qui sont difficiles à compresser, telles que des données incompressibles binaires ou des images JPG, ne l'utilisez pas.
BUCKET Nom du bucket que vous avez créé à l'étape 1 pour contenir le fichier de vidage.
DUMP_FILENAME Un fichier portant ce nom est créé dans votre bucket. Ce fichier affiche le contenu de la base de données sur votre serveur externe.

Mettre à jour l'instance de représentation source avec le chemin d'accès au fichier du bucket Cloud Storage

Il s'agit d'une instance Cloud SQL qui représente le serveur de base de données source auprès de l'instance dupliquée Cloud SQL. Elle est visible dans la console Google Cloud et apparaît comme une instance Cloud SQL standard, mais elle ne contient aucune donnée, ne nécessite aucune configuration ni maintenance, et n'affecte pas la facturation.

Le fichier source.json contient des informations sur l'instance de représentation source.

REST

{
  "name": "PRIMARY_INSTANCE_NAME",
  "region": "REGION_NAME",
  "databaseVersion": "DB_NAME_AND_VERSION",
  "onPremisesConfiguration": {
    "hostPort": "IP_ADDRESS_AND_PORT",
    "username": "USERNAME",
    "password": "PASSWORD"
  }
  "dumpFilePath" :"DUMP_FILE_PATH"
}

exemple

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
  "dumpFilePath" :"gs://replica-bucket/source-database.sql.gz"
}
Valeur Description
PRIMARY_INSTANCE_NAME Nom de l'instance Cloud SQL associée à l'instance de représentation source.
REGION_NAME Nom de la région attribuée à l'instance de représentation source.
DB_NAME_AND_VERSION Nom et numéro de version de la base de données associée à l'instance de représentation source.
IP_ADDRESS_AND_PORT Adresse IP et numéro de port réservés à l'instance de représentation source.
USERNAME Nom de l'instance de représentation source.
PASSWORD Mot de passe de l'instance de représentation source.
DUMP_FILE_PATH Chemin du fichier de vidage qui contient le contenu de la base de données sur votre serveur externe.

Après avoir configuré l'instance dupliquée Cloud SQL, vous devez mettre à jour votre instance de représentation source avec le chemin d'accès au fichier de votre bucket Cloud Storage.

REST

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_REPRESENTATION_INSTANCE

exemple

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./source.json \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
Valeur Description
JSON_PATH Chemin du fichier JSON stocké dans le bucket Cloud Storage. Ce fichier contient des données sur l'instance de représentation source.
PROJECT_ID ID de votre projet dans Google Cloud.
SOURCE_REPRESENTATION_INSTANCE Nom de l'instance de représentation source.

Démarrer la réplication sur le serveur externe

Après avoir vérifié que vous pouvez répliquer à partir du serveur externe, vous êtes prêt à effectuer la réplication.

Au cours du processus d'importation initial, n'effectuez aucune opération LDD sur le serveur externe. Cela pourrait entraîner des incohérences lors de l'importation. Une fois le processus d'importation terminé, l'instance dupliquée utilise les journaux binaires sur le serveur externe pour récupérer l'état actuel de celui-ci.

Ouvrez un terminal, connectez-vous à l'aide de gcloud, puis saisissez la commande curl pour répliquer à partir du serveur externe.

REST

  gcloud auth login
  ACCESS_TOKEN="$(gcloud auth print-access-token)"
  curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
       --header 'Content-Type: application/json' \
       --data '{
           "syncMode": "SYNC_MODE",
           "skipVerification": "SKIP_VERIFICATION"
         }' \
       -X POST \
       https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/startExternalSync

exemple

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "syncMode": "online",
             "skipVerification": false
           }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Valeur Description
SYNC_MODE Vérifie que vous pouvez maintenir la synchronisation de l'instance dupliquée Cloud SQL avec le serveur externe une fois la réplication configurée.
SKIP_VERIFICATION Indique si l'étape de validation intégrée doit être ignorée ou pas avant de synchroniser vos données. Recommandé uniquement si vous avez déjà validé vos paramètres de réplication.
PROJECT_ID ID de votre projet dans Google Cloud.
REPLICA_INSTANCE ID de votre instance dupliquée Cloud SQL.

Nettoyer l'espace de stockage

Si vous avez répliqué à partir d'un fichier dans un bucket, vous pouvez supprimer ce fichier et ce bucket. Consultez la documentation Cloud Storage sur la suppression d'objets et la suppression de buckets.

Procéder à la réplication

Une fois que vous avez démarré la réplication à partir du serveur externe, vous devez surveiller la réplication, puis terminer la migration. Pour en savoir plus, consultez la section Surveiller la réplication.

Résoudre les problèmes

Problème Dépannage
Lost connection to MySQL server during query when dumping table. Peut-être que la source est devenue indisponible ou que le vidage contenait des paquets trop volumineux.

Assurez-vous que l'instance principale externe est disponible. Vous pouvez également modifier les valeurs des options net_read_timeout et net_write_timeout sur l'instance source afin d'arrêter l'erreur. Pour en savoir plus sur les valeurs autorisées pour ces options, consultez la page Configurer des options de base de données.

Pour en savoir plus sur l'utilisation des options de mysqldump pour la migration des importations gérées, consultez la section Options de synchronisation initiales autorisées et par défaut.

La migration initiale des données a abouti, mais aucune donnée n'est répliquée. Il se peut que votre base de données source ait défini des options de réplication qui empêchent la réplication de certaines ou de toutes les modifications de la base de données.

Assurez-vous que les options de réplication telles que binlog-do-db, binlog-ignore-db, replicate-do-db ou replicate-ignore-db ne sont pas définies de manière conflictuelle.

Exécutez la commande show master status sur l'instance principale pour afficher les paramètres actuels.

La migration initiale des données a abouti, mais la réplication des données cesse de fonctionner après un certain temps. Solutions possibles

  • Vérifiez les métriques de réplication de votre instance dupliquée dans la section "Cloud Monitoring" de Google Cloud Console.
  • Les erreurs du thread d'E/S MySQL ou du thread SQL sont disponibles dans Cloud Logging dans les fichiers mysql.err log.
  • Cette erreur peut également se produire lors de la connexion à l'instance dupliquée. Exécutez la commande SHOW SLAVE STATUS et vérifiez les champs suivants dans le résultat :
    • Slave_IO_Running
    • Slave_SQL_Running
    • Last_IO_Error
    • Last_SQL_Error
mysqld check failed: data disk is full. Le disque de données de l'instance dupliquée est saturé.

Augmentez la taille du disque de l'instance dupliquée. Vous pouvez augmenter manuellement la taille du disque ou activer l'augmentation automatique de l'espace de stockage.

Examiner vos journaux de réplication

Lorsque vous vérifiez les paramètres de réplication, des journaux sont générés.

Pour afficher ces journaux, procédez comme suit :

  1. Accédez à la visionneuse de journaux dans Google Cloud Console.

    Accéder à la visionneuse de journaux

  2. Sélectionnez l'instance dupliquée Cloud SQL dans la liste déroulante Instance.
  3. Sélectionnez le fichier journal replication-setup.log.

Si l'instance dupliquée Cloud SQL ne parvient pas à se connecter au serveur externe, vérifiez les points suivants :

  • Tous les pare-feu du serveur externe sont configurés pour autoriser les connexions à partir de l'adresse IP sortante de l'instance dupliquée Cloud SQL.
  • Votre configuration SSL/TLS est correcte.
  • Votre utilisateur de réplication, hôte et mot de passe sont corrects.

Étape suivante