Todos os produtos
Search
Central de documentação

Elasticsearch:Use o Canal para sincronizar dados do MySQL para o Alibaba Cloud Elasticsearch

Última atualização: Sep 23, 2026

Você pode usar o Canal para sincronizar dados incrementais do MySQL para um cluster do Alibaba Cloud Elasticsearch ou aplicação ES Serverless em tempo real.

orES Serverlessapplication

Informações de fundo

O Canal é um product de código aberto fornecido pelo Alibaba Group que analisa dados de log incrementais no MySQL e oferece recursos de assinatura e consumo de dados. Para mais informações, consulte Canal. Neste exemplo, o Canal atua como um nó secundário de uma instância do ApsaraDB RDS for MySQL, recebe logs binários de alterações incrementais de dados e usa uma api RESTful para gravar os dados em um cluster do Alibaba Cloud Elasticsearch .

Pré-requisitos

Por favor, crie uma instância do ApsaraDB RDS for MySQL, um cluster do Alibaba Cloud Elasticsearch e uma instância do Elastic Compute Service (ecs). Recomendamos que você crie-os na mesma virtual private cloud (VPC).

Limites

  • Esta solução sincroniza apenas dados incrementais do MySQL para um cluster do Alibaba Cloud Elasticsearch.

  • A versão do Java Development Kit (JDK) deve ser 1.8.0 ou superior.

  • O Canal 1.1.4 não pode ser usado para sincronizar dados com um cluster Elasticsearch V7.X.

    Use o Canal 1.1.5 para sincronizar dados com um cluster Elasticsearch V7.X e use o Canal 1.1.7 para sincronizar dados com um cluster Elasticsearch V8.X. Você também pode usar um método como Logstash ou Data Transmission Service (DTS) para sincronizar dados do MySQL.

  • Você pode personalizar mapeamentos de índice para a sincronização de dados. Os nomes e tipos de dados dos campos nos mapeamentos de índice devem corresponder aos do banco de dados ApsaraDB RDS for MySQL.

  • O Canal deve permanecer disponível durante a sincronização de dados. Certifique-se de que a sincronização não seja interrompida por eventos como reinicializações da instância ecs ou encerramentos inesperados do Canal.

  • O Canal adapter não pode se conectar a um cluster do Alibaba Cloud Elasticsearch via HTTPS.

Procedimento

Etapa 1: Preparar uma source de dados do MySQL

Acesse o ApsaraDB RDS console e crie um banco de dados e uma tabela do ApsaraDB RDS for MySQL. Para mais informações, consulte General workflow to use ApsaraDB RDS for MySQL. Neste exemplo, a seguinte instrução é usada para criar uma tabela:

-- create table
CREATE TABLE `es_test` (
    `id` bigint(32) NOT NULL,
    `name` text NOT NULL,
    `count` text NOT NULL,
    `color` text NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8;

Etapa 2: Crie um índice e configure mapeamentos para o índice

  1. Acesse o console do Kibana do cluster do Elasticsearch. Para mais informações, consulte Log on to the Kibana console.

    Nota

    Neste exemplo, é utilizado um cluster Elasticsearch V6.7.0. As operações em clusters de outras versões podem ser diferentes.

  2. No menu de navegação à esquerda, escolha a opção Management > Dev Tools.

  3. No console, execute o seguinte comando para criar um índice.

    Neste exemplo, é criado um índice chamado es_test. O índice contém os seguintes campos: count, id, name e color.

    Importante

    Certifique-se de que os nomes e tipos de dados dos campos definidos nos mapeamentos do índice sejam iguais aos nomes e tipos de dados dos campos preparados em Step 1: Prepare a MySQL data source.

    PUT es_test?include_type_name=true
    {
    
        "settings" : {
          "index" : {
            "number_of_shards" : "5",
            "number_of_replicas" : "1"
          }
        },
        "mappings" : {
            "_doc" : {
                "properties" : {
                  "count": {          
                       "type": "text"       
                   },
                  "id": {
                       "type": "integer"
                   },
                   "name": {
                        "type" : "text",
                        "analyzer": "ik_smart"                   
                    },
                    "color" : {
                        "type" : "text"                    
                    }
                }
            }
        }
    }

    Após a criação do índice e a configuração dos mapeamentos, o seguinte resultado é retornado:

    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "index" : "es_test"
    }

Etapa 3: instale o JDK

  1. Conecte-se à instância ecs.

    Para mais informações, consulte Connect to a Linux instance by using a password or key.

    Nota

    Neste exemplo, é utilizado um usuário comum.

  2. visualize os pacotes JDK disponíveis. Antes de instalar, selecione a versão correta.

    sudo yum search java | grep -i --color JDK
  3. instale o JDK da versão necessária.

    Este tópico usa java-1.8.0-openjdk-devel.x86_64 como exemplo.

    sudo yum install java-1.8.0-openjdk-devel.x86_64
  4. Configure as variáveis de ambiente.

    1. Abra o arquivo profile na pasta etc.

      vim ~/.bash_profile
    2. Adicione as seguintes variáveis de ambiente ao arquivo:

      export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64
      export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      export PATH=$PATH:$JAVA_HOME/bin
      Importante

      Ao usar as variáveis de ambiente, substitua JAVA_HOME pelo caminho de instalação do seu JDK. Execute o comando find / -name 'java' para consultar o caminho de instalação do seu JDK.

    3. Pressione a tecla Esc, insira :wq e salve o arquivo para sair do editor vi. Em seguida, execute o seguinte comando para aplicar as alterações:

      source ~/.bash_profile
  5. Execute o seguinte comando e verifique se o JDK está instalado:

    java -version

    Se o seguinte resultado for retornado, o JDK está instalado:

    openjdk version "1.8.0_362"
    OpenJDK Runtime Environment (build 1.8.0_362-b08)
    OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)

Etapa 4: instale e inicie o servidor Canal

  1. baixe o pacote do servidor Canal.

    Neste exemplo, é utilizado um servidor Canal 1.1.4.

    wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
    Nota
    • O Canal 1.1.5 suporta clusters Elasticsearch V7.0. Se você estiver usando um cluster Elasticsearch V7.0, baixe o pacote do Canal 1.1.5. Para mais informações, consulte Canal release note.

    • baixe os pacotes do servidor Canal e do Canal adapter pela Internet. Certifique-se de que sua instância ecs tenha acesso à Internet.

  2. Execute o seguinte comando para descompactar o pacote:

    tar -zxvf canal.deployer-1.1.4.tar.gz
  3. Execute o seguinte comando e modifique o arquivo instance.properties no diretório conf/example/:

    vi conf/example/instance.properties
    
    #################################################
    ## mysql serverId , v1.0.26+ will autoGen
    # canal.instance.mysql.slaveId=0
    
    # enable gtid use true/false
    canal.instance.gtidon=false
    
    # position info
    canal.instance.master.address=rm-bpxxxd6ph.mysql.rds.aliyuncs.com:3306
    canal.instance.master.journal.name=
    canal.instance.master.position=
    canal.instance.master.timestamp=
    canal.instance.master.gtid=
    
    # rds oss binlog
    canal.instance.rds.accesskey=
    canal.instance.rds.secretkey=
    canal.instance.rds.instanceId=
    
    # table meta tsdb info
    canal.instance.tsdb.enable=true
    #canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
    #canal.instance.tsdb.dbUsername=canal
    #canal.instance.tsdb.dbPassword=canal
    
    #canal.instance.standby.address =
    #canal.instance.standby.journal.name =
    #canal.instance.standby.position =
    #canal.instance.standby.timestamp =
    #canal.instance.standby.gtid=
    
    # username/password
    canal.instance.dbUsername=xxx
    canal.instance.dbPassword=xxx
    canal.instance.connectionCharset = UTF-8
    # enable druid Decrypt database password
    canal.instance.enableDruid=false

    Parâmetro

    Descrição

    canal.instance.master.address

    defina este parâmetro como <endpoint interno da instância do ApsaraDB RDS for MySQL>:<Porta interna>. Você pode obter essas informações na página Basic Information da sua instância do ApsaraDB RDS for MySQL. Exemplo: rm-bp1u1xxxxxxxxx6ph.mysql.rds.aliyuncs.com:3306.

    canal.instance.dbUsername

    O nome de usuário do seu banco de dados ApsaraDB RDS for MySQL. Você pode obter isso na página Accounts da sua instância.

    canal.instance.dbPassword

    A senha usada para fazer login no banco de dados ApsaraDB RDS for MySQL.

  4. Pressione a tecla Esc e insira :wq e salve o arquivo para sair do editor vi.

  5. Inicie o servidor Canal, ative o serviço e consulte os logs.

    ./bin/startup.sh
    cat logs/canal/canal.log
    
    [root@VM01 ~]# ./bin/startup.sh
    cd to /root/bin for workaround relative path
    LOG CONFIGURATION : /root/bin/../conf/logback.xml
    canal conf : /root/bin/../conf/canal.properties
    CLASSPATH :/root/bin/../conf:/root/bin/../lib/zookeeper-3.4.5.jar:/root/bin/../lib/zkclient-0.10.jar:/root/bin/../lib/spring-tx-3.2.18.RELEASE.jar:/root/bin/../lib/spring-orm-3.2.18.RELEASE.jar:/root/bin/../lib/spring-jdbc-3.2.18.RELEASE.jar:/root/bin/../lib/spring-expression-3.2.18.RELEASE.jar:/root/bin/../lib/spring-core-3.2.18.RELEASE.jar:/root/bin/../lib/spring-context-3.2.18.RELEASE.jar:/root/bin/../lib/spring-beans-3.2.18.RELEASE.jar:/root/bin/../lib/spring-aop-3.2.18.RELEASE.jar:/root/bin/../lib/snakeyaml-1.19.jar:/root/bin/../lib/slf4j-api-1.7.12.jar:/root/bin/../lib/simpleclient_pushgateway-0.4.0.jar:/root/bin/../lib/simpleclient_httpserver-0.4.0.jar:/root/bin/../lib/simpleclient_hotspot-0.4.0.jar:/root/bin/../lib/simpleclient_common-0.4.0.jar:/root/bin/../lib/simpleclient-0.4.0.jar:/root/bin/../lib/scala-reflect-2.11.12.jar:/root/bin/../lib/scala-logging_2.11-3.8.0.jar:/root/bin/../lib/scala-library-2.11.12.jar:/root/bin/../lib/rocketmq-srvutil-4.5.2.jar:/root/bin/../lib/rocketmq-remoting-4.5.2.jar:/root/bin/../lib/rocketmq-logging-4.5.2.jar:/root/bin/../lib/rocketmq-common-4.5.2.jar:/root/bin/../lib/rocketmq-client-4.5.2.jar:/root/bin/../lib/rocketmq-acl-4.5.2.jar:/root/bin/../lib/protobuf-java-3.6.1.jar:/root/bin/../lib/oro-2.0.8.jar:/root/bin/../lib/netty-tcnative-boringssl-static-1.1.33.Fork26.jar:/root/bin/../lib/netty-all-4.1.6.Final.jar:/root/bin/../lib/netty-3.2.2.Final.jar:/root/bin/../lib/mysql-connector-java-5.1.47.jar:/root/bin/../lib/metrics-core-2.2.0.jar:/root/bin/../lib/lz4-java-1.4.1.jar:/root/bin/../lib/logback-core-1.1.3.jar:/root/bin/../lib/logback-classic-1.1.3.jar:/root/bin/../lib/kafka-clients-1.1.1.jar:/root/bin/../lib/kafka_2.11-1.1.1.jar:/root/bin/../lib/jsr305-3.0.2.jar:/root/bin/../lib/jopt-simple-5.0.4.jar:/root/bin/../lib/jctools-core-2.1.2.jar:/root/bin/../lib/jcl-over-slf4j-1.7.12.jar:/root/bin/../lib/jackson-databind-2.9.6.jar:/root/bin/../lib/jackson-core-2.9.6.jar:/root/bin/../lib/jackson-annotations-2.9.0.jar:/root/bin/../lib/ibatis-sqlmap-2.3.4.726.jar:/root/bin/../lib/httpcore-4.4.3.jar:/root/bin/../lib/httpclient-4.5.1.jar:/root/bin/../lib/h2-1.4.196.jar:/root/bin/../lib/guava-18.0.jar:/root/bin/../lib/fastsql-2.0.0_preview_97.jar:/root/bin/../lib/fastson-1.2.58.jar:/root/bin/../lib/druid-1.1.9.jar:/root/bin/../lib/disruptor-3.4.2.jar:/root/bin/../lib/commons-logging-1.1.3.jar:/root/bin/../lib/commons-lang3-3.4.jar:/root/bin/../lib/commons-lang-2.6.jar:/root/bin/../lib/commons-io-2.4.jar:/root/bin/../lib/commons-compress-1.9.jar:/root/bin/../lib/commons-codec-1.9.jar:/root/bin/../lib/commons-cli-1.2.jar:/root/bin/../lib/commons-beanutils-1.8.2.jar:/root/bin/../lib/canal.store-1.1.4.jar:/root/bin/../lib/canal.sink-1.1.4.jar:/root/bin/../lib/canal.server-1.1.4.jar:/root/bin/../lib/canal.protocol-1.1.4.jar:/root/bin/../lib/canal.prometheus-1.1.4.jar:/root/bin/../lib/canal.parse.driver-1.1.4.jar:/root/bin/../lib/canal.parse.dbsync-1.1.4.jar:/root/bin/../lib/canal.parse-1.1.4.jar:/root/bin/../lib/canal.meta-1.1.4.jar:/root/bin/../lib/canal.instance.spring-1.1.4.jar:/root/bin/../lib/canal.instance.manager-1.1.4.jar:/root/bin/../lib/canal.instance.core-1.1.4.jar:/root/bin/../lib/canal.filter-1.1.4.jar:/root/bin/../lib/canal.deployer-1.1.4.jar:/root/bin/../lib/canal.common-1.1.4.jar:/root/bin/../lib/aviator-2.2.1.jar:/root/bin/../lib/aopalliance-1.0.jar::/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/rt.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/lib/dt.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/lib/tools.jar
    acd to /root for continue
    [root@VM01 ~]# cat logs/canal/canal.log
    2019-09-05 14:57:57.654 [main] INFO  com.alibaba.otter.canal.deployer.CanalLauncher - ## set default uncaught exception handler
    2019-09-05 14:57:57.688 [main] INFO  com.alibaba.otter.canal.deployer.CanalLauncher - ## load canal configurations
    2019-09-05 14:57:57.698 [main] INFO  com.alibaba.otter.canal.deployer.CanalStarter - ## start the canal server.
    2019-09-05 14:57:57.732 [main] INFO  com.alibaba.otter.canal.deployer.CanalController - ## start the canal server[192.   4.192      234):11111]
    2019-09-05 14:57:58.726 [main] INFO  com.alibaba.otter.canal.deployer.CanalStarter - ## the canal server is running now ......
    [root@VM01 ~]#

Etapa 5: instale e inicie o Canal adapter

  1. baixe o pacote do Canal adapter.

    Neste exemplo, é utilizado um Canal adapter 1.1.4.

    wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.adapter-1.1.4.tar.gz
    Nota
    • O Canal 1.1.5 suporta clusters Elasticsearch V7.0. Se você estiver usando um cluster Elasticsearch V7.0, baixe o pacote do Canal 1.1.5. Para mais informações, consulte Canal release note.

    • baixe os pacotes do servidor Canal e do Canal adapter pela Internet. Certifique-se de que sua instância ecs tenha acesso à Internet.

  2. Execute o seguinte comando para descompactar o pacote:

    tar -zxvf canal.adapter-1.1.4.tar.gz
  3. Execute o seguinte comando e modifique o arquivo application.yml no diretório conf/:

    vi conf/application.yml
    
    server:
      port: 8081
    spring:
      jackson:
        date-format: yyyy-MM-dd HH:mm:ss
        time-zone: GMT+8
        default-property-inclusion: non_null
    
    canal.conf:
      mode: tcp # kafka rocketMQ
      canalServerHost: 127.0.0.1:11111
      batchSize: 500
      syncBatchSize: 1000
      retries: 0
      timeout:
      accessKey:
      secretKey:
      srcDataSources:
        defaultDS:
          url: jdbc:mysql://rm-******.mysql.rds.aliyuncs.com:3306/elasticsearch?useUnicode=true
          username: root
          password: ******
      canalAdapters:
      - instance: example
        groups:
        - groupId: g1
          outerAdapters:
          - name: logger
          - name: es
            hosts: es-cn-******.elasticsearch.aliyuncs.com:9200
            properties:
                mode: rest
                security.auth: elastic:******
                cluster.name: es-cn-******

    Parâmetro

    Descrição

    canal.conf.canalServerHost

    O endereço do deployer do Canal. Mantenha o valor padrão 127.0.0.1:11111.

    canal.conf.srcDataSources.defaultDS.url

    defina este parâmetro como jdbc:mysql://<endpoint interno da instância do ApsaraDB RDS for MySQL>:<Porta interna>/<Nome do banco de dados>?useUnicode=true. Você pode obter essas informações na página Basic Information da sua instância do ApsaraDB RDS for MySQL. Exemplo: jdbc:mysql://rm-bp1xxxxxxxxxnd6ph.mysql.rds.aliyuncs.com:3306/elasticsearch?useUnicode=true.

    canal.conf.srcDataSources.defaultDS.username

    O nome de usuário do seu banco de dados ApsaraDB RDS for MySQL. Você pode obter isso na página Accounts da sua instância do ApsaraDB RDS for MySQL.

    canal.conf.srcDataSources.defaultDS.password

    A senha usada para fazer login no banco de dados ApsaraDB RDS for MySQL.

    canal.conf.canalAdapters.groups.outerAdapters.hosts

    Localize name:es e defina hosts com um valor no formato <Endpoint interno do cluster do Elasticsearch>:<Porta interna>. Você pode obter as informações necessárias na página Basic Information do cluster do Elasticsearch. Exemplo: es-cn-v64xxxxxxxxx3medp.elasticsearch.aliyuncs.com:9200.

    canal.conf.canalAdapters.groups.outerAdapters.mode

    defina este parâmetro como rest.

    canal.conf.canalAdapters.groups.outerAdapters.properties.security.auth

    Defina este parâmetro com um valor no formato <Nome de usuário do cluster do Elasticsearch>:<Senha correspondente ao nome de usuário>. Exemplo: elastic:es_password.

    canal.conf.canalAdapters.groups.outerAdapters.properties.cluster.name

    O id do cluster do Elasticsearch. Você pode obter o id na página Basic Information do cluster do Elasticsearch. Exemplo: es-cn-v64xxxxxxxxx3medp.

  4. Pressione a tecla Esc e insira :wq e salve o arquivo para sair do editor vi.

  5. Repita as etapas anteriores e modifique o arquivo *.yml no diretório conf/es/ e especifique os campos que deseja mapear do banco de dados ApsaraDB RDS for MySQL para o cluster do Elasticsearch.

    
    dataSourceKey: defaultDS
    destination: example
    groupId: g1
    esMapping:
      _index: es_test
      _type: _doc
      _id: _id
      #pk: id
      sql: "select t.id as _id,t.id,t.count,t.name,t.color from es_test t"
      commitBatch: 3000

    Parâmetro

    Descrição

    esMapping._index

    O nome do índice que você criou na sua instância do Alibaba Cloud Elasticsearch em Step 2: Create an index. Este tópico usa es_test como exemplo.

    esMapping._type

    O tipo do índice que você criou na sua instância do Alibaba Cloud Elasticsearch em Step 2: Create an index. Este tópico usa _doc como exemplo.

    esMapping._id

    O id do documento a ser sincronizado com a instância do Elasticsearch. Você pode personalizar este valor. Este tópico usa _id como exemplo.

    esMapping.sql

    A instrução SQL usada para consultar os campos que você deseja sincronizar com o cluster do Elasticsearch. Neste exemplo, é usada a instrução select t.id as _id,t.id,t.count,t.name,t.color from es_test t.

  6. Inicie o Canal adapter e consulte os logs.

    ./bin/startup.sh
    cat logs/adapter/adapter.log
    Nota

    Neste exemplo, é utilizada uma instância do ApsaraDB RDS for MySQL com MySQL 5.7. Se você usar uma instância do ApsaraDB RDS for MySQL com outra versão do MySQL, certifique-se de que a versão do driver MySQL no Canal adapter seja compatível com a versão do MySQL da instância do ApsaraDB RDS for MySQL à qual deseja se conectar. Caso contrário, o Canal adapter falhará ao iniciar. Para mais informações, consulte a seção FAQ neste tópico.

    Se ## ES mapping config loaded e ## the canal client adapters are running now ...... aparecerem nos logs, o Canal adapter foi iniciado com sucesso. A saída de log esperada é a seguinte:

    
    2019-09-05 20:16:22.918 [Thread-2] INFO  com.alibaba.druid.pool.DruidDataSource - {dataSource-2} inited
    2019-09-05 20:16:24.928 [Thread-2] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterService - ## start the canal client adapters.
    2019-09-05 20:16:24.929 [Thread-2] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterLoader - Load canal adapter: logger succeed
    2019-09-05 20:16:24.929 [Thread-2] INFO  c.a.o.canal.client.adapter.es.config.ESSyncConfigLoader - ## Start loading es mapping config ...
    2019-09-05 20:16:24.943 [Thread-2] INFO  c.a.o.canal.client.adapter.es.config.ESSyncConfigLoader - ## ES mapping config loaded
    2019-09-05 20:16:25.182 [Thread-2] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterLoader - Load canal adapter: es succeed
    2019-09-05 20:16:25.185 [Thread-2] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterLoader - Start adapter for canal instance: example succeed
    2019-09-05 20:16:25.185 [Thread-2] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterService - ## the canal client adapters are running now ......
    2019-09-05 20:16:25.185 [Thread-2] INFO  c.a.o.canal.adapter.launcher.monitor.ApplicationConfigMonitor - ## adapter application config reloaded.
    2019-09-05 20:16:25.186 [Thread-8] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterWorker - =============> Start to connect destination: example <=============
    2019-09-05 20:16:25.186 [Thread-8] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterWorker - =============> Start to subscribe destination: example <=============
    2019-09-05 20:16:25.232 [Thread-8] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterWorker - =============> Subscribe destination: example succeed <=============
    2019-09-05 20:16:27.432 [pool-5-thread-1] INFO  c.a.o.canal.client.adapter.logger.LoggerAdapterExample - DML: {"data":null,"type":"mysql","destination":"example","es":1,"sql":"/* rds internal mark */ CREATE TABLE IF NOT EXISTS mysql.ha_health_check (\n  id   BIGINT  DEFAULT 0,\n  type CHAR(1) DEFAULT '0',\n  PRIMARY KEY (type)\n)\n/*CREATE*/"}

Etapa 6: verifique o resultado da sincronização de dados incrementais

  1. No seu banco de dados ApsaraDB RDS for MySQL, adicione, modifique ou exclua dados na tabela es_test.

    insert `ES`.`es_test`(`count`,`id`,`name`,`color`) values('11',2,'canal_test2','red');
  2. Acesse o console do Kibana do cluster do Elasticsearch. Para mais informações, consulte Log on to the Kibana console.

  3. No menu de navegação à esquerda, escolha a opção Management > Dev Tools.

  4. No console, execute o seguinte comando para consultar os dados sincronizados.

    GET /es_test/_search

    Se a sincronização de dados for bem-sucedida, o seguinte resultado será retornado:

    
    GET /es_test/_search
    
    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : 1,
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "es_test",
            "_type" : "_doc",
            "_id" : "2",
            "_score" : 1.0,
            "_source" : {
              "id" : 2,
              "count" : "11",
              "name" : "canal_test2",
              "color" : "red"
            }
          }
        ]
      }
    }
    Importante

    O Canal sincroniza apenas dados incrementais.

Perguntas frequentes

P: O que devo fazer se a seguinte mensagem de erro for retornada nos logs gerados pelo Canal adapter ao iniciar o adapter: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource

at com.alibaba.otter.canal.client.adapter.es7x.ES7xAdapter.init(ES7xAdapter.java:54) ~[client-adapter.es7x-1.1.5-jar-with-dependencies.jar:na]

R: Substitua client-adapter.es7x-1.1.5-jar-with-dependencies.jar no diretório canal.adapter-1.1.5\plugin pelo arquivo correspondente ao canal-1.1.5-alpha-2.

Nota

Para mais informações, consulte Canal issues.

Neste exemplo, o usuário root é utilizado.

  1. baixe o pacote do canal-1.1.5-alpha-2. Para mais informações, consulte Canal release note.

    wget https://github.com/alibaba/canal/releases/download/canal-1.1.5-alpha-2/canal.adapter-1.1.5-SNAPSHOT.tar.gz
  2. Descompacte o pacote.

    tar -zxvf canal.adapter-1.1.5-SNAPSHOT.tar.gz
  3. Copie client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies.jar na pasta plugin do canal-1.1.5-alpha-2 para o diretório canal.adapter-1.1.5\plugin.

    Nota

    O diretório do arquivo que você precisa copiar pode ser diferente. O diretório real prevalece.

    cp canal.adapter-1.1.5-SNAPSHOT/plugin/client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies.jar canal/canal.adapter/plugin
  4. Exclua client-adapter.es7x-1.1.5-jar-with-dependencies.jar do diretório canal.adapter-1.1.5\plugin.

    rm -rf client-adapter.es7x-1.1.5-jar-with-dependencies.jar
  5. modifique o nome do arquivo.

    mv client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies.jar client-adapter.es7x-1.1.5-jar-with-dependencies.jar 

P: O que devo fazer se a seguinte mensagem de erro for retornada nos logs gerados pelo Canal adapter ao iniciar o adapter: java.sql.SQLException: Unknown system variable 'query_cache_size'?

R: Uma possível razão é que a versão do driver MySQL no Canal adapter seja incompatível com a versão do MySQL da sua instância do ApsaraDB RDS. Por exemplo, o Canal adapter 1.1.4 inclui o driver MySQL 5.1.40, que é incompatível com o MySQL 8.x. Substitua o driver MySQL no Canal adapter por uma versão que corresponda à sua versão do ApsaraDB RDS for MySQL.

P: Quero sincronizar dados de uma instância do ApsaraDB RDS for MySQL com MySQL 8.0 para um cluster do Elasticsearch. Como altero o driver MySQL existente para o driver MySQL 8.0?

R: Neste exemplo, o usuário root é utilizado.

  1. baixe o pacote do driver MySQL 8.0.

    wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.29.zip
  2. Descompacte o pacote:

    unzip mysql-connector-java-8.0.29.zip
  3. Copie o arquivo obtido para o diretório lib do Canal adapter.

    mv mysql-connector-java-8.0.29/mysql-connector-java-8.0.29.jar lib/
  4. Adicione permissões.

    chmod 777 lib/mysql-connector-java-8.0.29.jar
    chmod +st lib/mysql-connector-java-8.0.29.jar
  5. Exclua o driver MySQL 5.x.

    rm -rf lib/mysql-connector-java-5.1.40.jar

Referências