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).
Para criar uma instância do ApsaraDB RDS for MySQL, consulte Create an ApsaraDB RDS for MySQL instance. Neste exemplo, é criada uma instância do ApsaraDB RDS com MySQL 5.7.
-
Para criar um cluster do Alibaba Cloud Elasticsearch , consulte Create an Alibaba Cloud Elasticsearch cluster. Neste exemplo, é criado um cluster Elasticsearch V6.7 da Kernel-enhanced Edition.
NotaAntes de usar o Canal para gravar dados no seu cluster do Elasticsearch , adicione o endereço IP da instância ecs onde o Canal está implantado à lista de permissões de endereços IP do cluster do Elasticsearch . Para mais informações, consulte Configure a public or private IP address whitelist for an Elasticsearch cluster.
Uma instância do Elastic Compute Service (ecs) para implantar o Canal-server e o Canal-adapter. Para mais informações, consulte Create an instance by using the wizard. A instância criada neste tópico usa a Image CentOS 7.6 64-bit.
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
-
Acesse o console do Kibana do cluster do Elasticsearch. Para mais informações, consulte Log on to the Kibana console.
NotaNeste exemplo, é utilizado um cluster Elasticsearch V6.7.0. As operações em clusters de outras versões podem ser diferentes.
No menu de navegação à esquerda, escolha a opção .
-
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.
ImportanteCertifique-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
-
Conecte-se à instância ecs.
Para mais informações, consulte Connect to a Linux instance by using a password or key.
NotaNeste exemplo, é utilizado um usuário comum.
-
visualize os pacotes JDK disponíveis. Antes de instalar, selecione a versão correta.
sudo yum search java | grep -i --color JDK -
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 -
Configure as variáveis de ambiente.
-
Abra o arquivo profile na pasta etc.
vim ~/.bash_profile -
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/binImportanteAo 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. -
Pressione a tecla Esc, insira
:wqe salve o arquivo para sair do editor vi. Em seguida, execute o seguinte comando para aplicar as alterações:source ~/.bash_profile
-
-
Execute o seguinte comando e verifique se o JDK está instalado:
java -versionSe 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
-
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.gzNotaO 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.
-
Execute o seguinte comando para descompactar o pacote:
tar -zxvf canal.deployer-1.1.4.tar.gz -
Execute o seguinte comando e modifique o arquivo
instance.propertiesno 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=falseParâ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.
Pressione a tecla Esc e insira
:wqe salve o arquivo para sair do editor vi.-
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
-
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.gzNotaO 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.
-
Execute o seguinte comando para descompactar o pacote:
tar -zxvf canal.adapter-1.1.4.tar.gz -
Execute o seguinte comando e modifique o arquivo
application.ymlno diretório conf/:vi conf/application.ymlserver: 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.
Pressione a tecla Esc e insira
:wqe salve o arquivo para sair do editor vi.-
Repita as etapas anteriores e modifique o arquivo
*.ymlno 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: 3000Parâ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. -
Inicie o Canal adapter e consulte os logs.
./bin/startup.sh cat logs/adapter/adapter.logNotaNeste 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 loadede## 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
-
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'); Acesse o console do Kibana do cluster do Elasticsearch. Para mais informações, consulte Log on to the Kibana console.
No menu de navegação à esquerda, escolha a opção .
-
No console, execute o seguinte comando para consultar os dados sincronizados.
GET /es_test/_searchSe 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" } } ] } }ImportanteO 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.
Para mais informações, consulte Canal issues.
Neste exemplo, o usuário root é utilizado.
-
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 -
Descompacte o pacote.
tar -zxvf canal.adapter-1.1.5-SNAPSHOT.tar.gz -
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.
NotaO 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 -
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 -
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.
-
baixe o pacote do driver MySQL 8.0.
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.29.zip -
Descompacte o pacote:
unzip mysql-connector-java-8.0.29.zip -
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/ -
Adicione permissões.
chmod 777 lib/mysql-connector-java-8.0.29.jar chmod +st lib/mysql-connector-java-8.0.29.jar -
Exclua o driver MySQL 5.x.
rm -rf lib/mysql-connector-java-5.1.40.jar