Tous les produits
Search
Centre de documentation

Elasticsearch:Utiliser DTS pour synchroniser les données de PolarDB for MySQL vers Alibaba Cloud Elasticsearch

Dernière mise à jour :Aug 21, 2026

Lorsque les requêtes PolarDB for MySQL sont lentes, utilisez Data Transmission Service (DTS) pour synchroniser les données de production en temps réel vers un cluster Alibaba Cloud Elasticsearch afin d'effectuer des recherches et des analyses. Cette solution convient aux scénarios nécessitant une synchronisation en temps réel haute performance depuis des bases de données relationnelles.

Contexte

Les services cloud suivants interviennent :

  • Data Transmission Service (DTS) : service de streaming de données qui intègre la migration de données, l'abonnement aux données et la synchronisation de données en temps réel. DTS prend en charge la synchronisation des opérations INSERT, DELETE et UPDATE. Pour plus d'informations, consultez Data Transmission Service (DTS) et Présentation des scénarios de synchronisation de données.

  • PolarDB est un service de base de données relationnelle de nouvelle génération développé par Alibaba Cloud, compatible avec MySQL, PostgreSQL et Oracle. Un cluster PolarDB prend en charge jusqu'à 100 To de stockage et peut évoluer jusqu'à 16 nœuds. Pour plus d'informations, consultez Présentation de PolarDB for MySQL.

  • Elasticsearch est un moteur de recherche et d'analyse distribué en temps réel basé sur Lucene, qui stocke, interroge et analyse de grands ensembles de données en quasi-temps réel. Pour plus d'informations, consultez Qu'est-ce qu'Alibaba Cloud Elasticsearch ?

Précautions

  • DTS ne synchronise pas les modifications de données générées par les opérations DDL. Si une opération DDL est effectuée sur une table de la base de données source pendant la synchronisation des données, vous devez procéder comme suit : supprimez la table de la tâche de synchronisation de données, supprimez l'index de la table du cluster Elasticsearch, puis ajoutez à nouveau la table à la tâche de synchronisation de données. Pour plus d'informations, consultez Supprimer un objet d'une tâche de synchronisation de données et Ajouter un objet à une tâche de synchronisation de données.

  • Si vous souhaitez ajouter des colonnes à la table source, modifiez les mappages de l'index correspondant à la table. Ensuite, effectuez l'opération DDL associée sur la table source, mettez en pause la tâche de synchronisation de données, puis redémarrez-la.

  • La synchronisation complète des données consomme des ressources de lecture et d'écriture sur les bases de données source et de destination, ce qui peut augmenter leur charge. Si votre base de données présente de mauvaises performances, des spécifications faibles ou des charges de travail lourdes (par exemple, des requêtes SQL lentes, des tables sans clés primaires ou des interblocages au niveau de la destination), l'augmentation de la charge peut entraîner une indisponibilité du service. Évaluez les performances de la base de données au préalable et effectuez la synchronisation des données pendant les heures creuses, lorsque l'utilisation du CPU des deux bases de données est inférieure à 30 %.

    • Si une tâche de synchronisation complète des données échoue pendant les heures de pointe, vous pouvez la redémarrer.

    • Si vous effectuez une synchronisation incrémentielle des données pendant les heures de pointe, une latence de synchronisation des données peut survenir.

Processus

Pour synchroniser les données, procédez comme suit :

  1. Préparatifs : ajoutez les données à synchroniser à la base de données source PolarDB for MySQL, créez un cluster Alibaba Cloud Elasticsearch et activez la fonctionnalité Auto Indexing pour le cluster Elasticsearch.

  2. Créer et exécuter une tâche de synchronisation de données : créez et exécutez une tâche de synchronisation de données dans la console DTS. Les données complètes et incrémentielles sont alors automatiquement synchronisées.

Étape 1 : Effectuer les préparatifs

Dans cet exemple, un cluster PolarDB for MySQL 8.0.1 Enterprise Edition et un cluster Alibaba Cloud Elasticsearch V7.10 sont préparés.

Préparer la base de données source et les données à synchroniser

  1. Créez un cluster PolarDB for MySQL 8.0.1 Enterprise Edition. Pour plus d'informations, consultez Acheter un cluster Enterprise Edition.

  2. Activez la fonctionnalité de journalisation binaire pour le cluster PolarDB for MySQL. Pour plus d'informations, consultez Activer la journalisation binaire.

    Dans le volet de navigation de gauche, choisissez Settings and Management > Binlog Management. Sur la page Binlog Management, cliquez sur Enable Now.

  3. Créez un compte et une base de données nommée test_polardb. Pour plus d'informations, consultez Créer et gérer des comptes de base de données et Gérer les bases de données.

  4. Dans la base de données test_polardb, créez une table nommée product et insérez des données.

    • Créer une table

      CREATE TABLE `product` (
          `id` bigint(32) NOT NULL AUTO_INCREMENT,
          `name` varchar(32) NULL,
          `price` varchar(32) NULL,
          `code` varchar(32) NULL,
          `color` varchar(32) NULL,
          PRIMARY KEY (`id`)
      ) ENGINE=InnoDB
      DEFAULT CHARACTER SET=utf8;
    • Insérer des données de test dans la table

      INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (1,'mobile phone A','2000','amp','golden');
      INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (2,'mobile phone B','2200','bmp','white');
      INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (3,'mobile phone C','2600','cmp','black');
      INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (4,'mobile phone D','2700','dmp','red');
      INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (5,'mobile phone E','2800','emp','silvery');

Préparer le cluster Elasticsearch de destination

  1. Créez un cluster Alibaba Cloud Elasticsearch V7.10. Pour plus d'informations, consultez Créer un cluster Alibaba Cloud Elasticsearch.

  2. Activez la fonctionnalité Auto Indexing pour le cluster Elasticsearch. Pour plus d'informations, consultez Configurer le fichier YML.

    Sur la page Settings and Management > Cluster Configuration de l'instance, repérez l'élément de configuration Auto Indexing dans la section YML File Configuration et cliquez sur Modify Configuration à droite pour l'activer.

Étape 2 : Créer et exécuter une tâche de synchronisation de données

  1. Connectez-vous à la page de liste des tâches de synchronisation de données DTS (nouvelle version).

  2. Cliquez sur Create Task.

  3. Sur la page qui s'affiche, créez et configurez une tâche de synchronisation de données selon les instructions.

    Pour obtenir des informations sur les paramètres impliqués dans les étapes suivantes, consultez Synchroniser les données d'un cluster PolarDB for MySQL.

    1. Configurez les bases de données source et de destination, puis cliquez sur Test Connectivity and Proceed.

      Informations sur la base de données source :

      • Définissez Database Type sur PolarDB for MySQL

      • Définissez Access Method sur Cloud Instance et définissez Instance Region sur China (Hangzhou)

      • Définissez Cross-account sur No

      • Sélectionnez l'PolarDB Instance ID et saisissez le Database Account et le Database Password

      • Définissez Connection Type sur Non-encrypted Connection

      Informations sur la base de données de destination :

      • Définissez Database Type sur Elasticsearch

      • Définissez Access Method sur Cloud Instance et définissez Instance Region sur China (Hangzhou)

      • Définissez Type sur Cluster

      • Sélectionnez l'Instance ID, définissez Database Account sur elastic et saisissez le Database Password

    2. Configurez les objets dont vous souhaitez synchroniser les données.

      • Synchronization Type : sélectionnez Schema Synchronization, Full Data Synchronization et Incremental Data Synchronization

      • Index Name : sélectionnez TableName

      • Processing Mode of Conflicting Tables : sélectionnez Pre-check and Report Errors

      • Case Sensitivity Policy for Object Names in the Destination Database : sélectionnez DTS Default Policy

      • Dans la section Source Objects, déplacez la table product de la base de données test_polardb vers la section Selected Objects

    3. Configurez les paramètres avancés. Dans cet exemple, les paramètres avancés par défaut sont utilisés.

    4. Sur la page Database/Table/Column Settings, cliquez sur Set All to Non-_routing Policy.

      Si le cluster Elasticsearch de destination exécute une version 7.x, vous devez définir la stratégie de routage sur non-routage pour toutes les tables.

  4. Une fois la configuration terminée, enregistrez la tâche de synchronisation de données, effectuez une pré-vérification de la tâche et achetez une instance DTS pour démarrer la tâche de synchronisation de données.

    Après l'achat de l'instance DTS, la tâche de synchronisation de données démarre automatiquement. Vous pouvez consulter la progression sur la page Data Synchronization. Une fois la synchronisation complète des données terminée, vous pouvez interroger les données synchronisées dans le cluster Elasticsearch.

    Dans la colonne Running Phase Information, vous pouvez visualiser la progression de la synchronisation, qui comprend trois phases : Schema Synchronization, Full Data Synchronization et Incremental Data Synchronization. Une coche verte s'affiche après chaque phase terminée.

Étape 3 (facultative) : Vérifier les résultats de la synchronisation des données

  1. Connectez-vous à la console Kibana du cluster Elasticsearch.

    Pour plus d'informations, consultez Se connecter à la console Kibana.

  2. Sur la page Kibana, accédez à 菜单.png > Management > Dev Tools. Dans la Console, exécutez les commandes suivantes.

  3. Vérifiez le résultat de la synchronisation des données complètes.

    Exécutez la commande suivante :

    GET /product/_search

    Si la commande s'exécute correctement, le résultat suivant est renvoyé :

    {
      "took" : 3,
      "timed_out" : false,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 5,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "product",
            "_type" : "product",
            "_id" : "3",
            "_score" : 1.0,
            "_source" : {
              "id" : 3,
              "name" : "mobile phone C",
              "price" : "2600",
              "code" : "cmp",
              "color" : "black"
            }
          },
          {
            "_index" : "product",
            "_type" : "product",
            "_id" : "5",
            "_score" : 1.0,
            "_source" : {
              "id" : 5,
              "name" : "mobile phone E",
              "price" : "2800",
              "code" : "emp",
              "color" : "silvery"
            }
          },
          {
            "_index" : "product",
            "_type" : "product",
            "_id" : "4",
            "_score" : 1.0,
            "_source" : {
              "id" : 4,
              "name" : "mobile phone D",
              "price" : "2700",
              "code" : "dmp",
              "color" : "red"
            }
          },
          {
            "_index" : "product",
            "_type" : "product",
            "_id" : "2",
            "_score" : 1.0,
            "_source" : {
              "id" : 2,
              "name" : "mobile phone B",
              "price" : "2200",
              "code" : "bmp",
              "color" : "white"
            }
          },
          {
            "_index" : "product",
            "_type" : "product",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : {
              "id" : 1,
              "name" : "mobile phone A",
              "price" : "2000",
              "code" : "amp",
              "color" : "golden"
            }
          }
        ]
      }
    }
  4. Vérifiez le résultat de la synchronisation des données incrémentielles.

    1. Exécutez l'instruction suivante pour insérer un enregistrement de données dans la table source :

      INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (6,'mobile phone F','2750','fmp','white');
    2. Une fois la synchronisation incrémentielle des données terminée, exécutez à nouveau la commande GET /product/_search pour afficher le résultat.

      Si la commande s'exécute correctement, le résultat suivant est renvoyé :

      {
        "took" : 439,
        "timed_out" : false,
        "_shards" : {
          "total" : 5,
          "successful" : 5,
          "skipped" : 0,
          "failed" : 0
        },
        "hits" : {
          "total" : {
            "value" : 6,
            "relation" : "eq"
          },
          "max_score" : 1.0,
          "hits" : [
            {
              "_index" : "product",
              "_type" : "product",
              "_id" : "3",
              "_score" : 1.0,
              "_source" : {
                "id" : 3,
                "name" : "mobile phone C",
                "price" : "2600",
                "code" : "cmp",
                "color" : "black"
              }
            },
            {
              "_index" : "product",
              "_type" : "product",
              "_id" : "5",
              "_score" : 1.0,
              "_source" : {
                "id" : 5,
                "name" : "mobile phone E",
                "price" : "2800",
                "code" : "emp",
                "color" : "silvery"
              }
            },
            {
              "_index" : "product",
              "_type" : "product",
              "_id" : "4",
              "_score" : 1.0,
              "_source" : {
                "id" : 4,
                "name" : "mobile phone D",
                "price" : "2700",
                "code" : "dmp",
                "color" : "red"
              }
            },
            {
              "_index" : "product",
              "_type" : "product",
              "_id" : "2",
              "_score" : 1.0,
              "_source" : {
                "id" : 2,
                "name" : "mobile phone B",
                "price" : "2200",
                "code" : "bmp",
                "color" : "white"
              }
            },
            {
              "_index" : "product",
              "_type" : "product",
              "_id" : "6",
              "_score" : 1.0,
              "_source" : {
                "code" : "fmp",
                "color" : "white",
                "price" : "2750",
                "name" : "mobile phone F",
                "id" : 6
              }
            },
            {
              "_index" : "product",
              "_type" : "product",
              "_id" : "1",
              "_score" : 1.0,
              "_source" : {
                "id" : 1,
                "name" : "mobile phone A",
                "price" : "2000",
                "code" : "amp",
                "color" : "golden"
              }
            }
          ]
        }
      }