cancal 同步mysql数据到es中

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: cancal 同步mysql数据到es中

1.环境:

windocs service2012 、 jdk版本1.8 、canal版本1.5、mysql版本5.7、

注意:canal版本1.5需要的jdk是1.8   如果你下载的是canal1.6,jdk是1.8,那样会报错。

下载地址  Releases · alibaba/canal · GitHub  下载并上传到服务器

三个文件  

canal.adapter   客户端

canal.admin   后台web端

canal.deployer 服务端

2.mysql配置:

mysq 开启日志  mysql配置添加

user=mysql
slow_query_log = 1
log_error = /home/data/mysql57/data/mysql.err
slow_query_log  = ON     #开启慢查询
long_query_time  =4     #设置慢查询时间 超过一秒的记录
server_id = 57
log-bin=mysql-bin
log-bin-index=master-bin.index
expire_logs_days = 7 
binlog_format=row
slave_skip_errors=1062
log_slave_updates=1
max_connections = 1000
wait_timeout=864000 
interactive_timeout=864000

添加用户权限

GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' IDENTIFIED BY 'Canal@123456' WITH GRANT OPTION;    
flush privileges;

创建数据库

create database bigdata default charset utf8;

3.配置服务器端  canal.deployer

在 conf/example/instance.properties

## mysql serverId , v1.0.26+ will autoGen
## v1.0.26版本后会自动生成slaveId,所以可以不用配置
# canal.instance.mysql.slaveId=0
# 数据库地址
canal.instance.master.address=127.0.0.1:3306
# binlog日志名称
canal.instance.master.journal.name=mysql-bin.000001
# mysql主库链接时起始的binlog偏移量
canal.instance.master.position=154
# mysql主库链接时起始的binlog的时间戳
canal.instance.master.timestamp=
canal.instance.master.gtid=
# username/password
# 在MySQL服务器授权的账号密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=Canal@123456
# 字符集
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
# table regex .*\\..*表示监听所有表 也可以写具体的表名,用,隔开
canal.instance.filter.regex=.*\\..*
# mysql 数据解析表的黑名单,多个表用,隔开
canal.instance.filter.black.regex=

我只配了两个地方

启动:进入 canal.deployer的目录 ./bin/startup.sh

4.配置客户端 canal.adapter

配置:配置客户端

vi application.yml  配置两个地方,一个是要同步的mysql数据库,一个是es配置

这是配置

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 #tcp kafka rocketMQ rabbitMQ
  flatMessage: true
  zookeeperHosts:
  syncBatchSize: 1000
  retries: 0
  timeout:
  accessKey:
  secretKey:
  consumerProperties:
    canal.tcp.server.host: 127.0.0.1:11111
    canal.tcp.zookeeper.hosts:
    canal.tcp.batch.size: 500
    canal.tcp.username:
    canal.tcp.password:
  srcDataSources:
    defaultDS:
      url: jdbc:mysql://127.0.0.1:3306/bigdata?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
      username: canal
      password: canal
    #defaultDS2:
       #url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
       #username: canal
       #password: 123456        
  canalAdapters:
   # canal instance Name or mq topic name
  - instance: example
    groups:
    - groupId: g1
      outerAdapters:
      - name: logger
      - name: es7
        hosts: 127.0.0.1:9200
        properties:
          mode: rest # or transport 
          security.auth: 
          cluster.name: my-application

这是同步的测试脚本

全量/增量更新 es7/mytest-user.yml 文件内容

dataSourceKey: defaultDS
destination: example
groupId: g1
esMapping:
  _index: detail202304
  _id: _id
#  upsert: true
#  pk: id
  sql: "select a.id as _id,a.id from t_data_order_detail2020 a"
#  objFields:
#    _labels: array:;
  etlCondition: "where a.id ={}"
  commitBatch: 3000

配置完启动客户端:进到安装目录

查看启动日志

全量更新为向Adapter发送POST更新

- postMan发送请求

curl  http://127.0.0.1:8081/etl/es7/mytest-user.yml
curl -X POST  http://127.0.0.1:8081/etl/es7/mytest-user.yml

额添加成功。剩下的就是java的事了。

可以通过jps查看

5.遇到的问题 Task not found

报错:

[root@hbyc ~]# curl -X POST  http://127.0.0.1:8081/etl/es7/t_data_order_detail202304.yml

{"succeeded":false,"errorMessage":"Task not found"}

解决:

canal的客户端 canal.adapter 在修改完配置需要重新启动客户端,要不然找不到配置文件。

每次修改配置文件需要重启客户端!!!

每次修改配置文件需要重启客户端!!!

每次修改配置文件需要重启客户端!!!

剩下的就是查看添加索引了

es添加索引命令行和浏览器添加索引--图文详解_舰长115的博客-CSDN博客

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
存储 关系型数据库 MySQL
MySQL是怎样存储数据的?
MySQL是怎样存储数据的?
|
2天前
|
SQL 关系型数据库 MySQL
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
|
3天前
|
存储 SQL 关系型数据库
MySQL的优化利器⭐️索引条件下推,千万数据下性能提升273%🚀
以小白的视角探究MySQL索引条件下推ICP的优化,其中包括server层与存储引擎层如何交互、索引、回表、ICP等内容
MySQL的优化利器⭐️索引条件下推,千万数据下性能提升273%🚀
|
4天前
|
存储 关系型数据库 MySQL
MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%🚀
本篇文章来讨论MySQL字段的字符类型选择并深入实践char与varchar类型的区别以及在千万数据下的性能测试
MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%🚀
|
4天前
|
关系型数据库 MySQL 数据管理
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
|
9天前
|
关系型数据库 MySQL 数据库
【MySQL-10】DCL-数据控制语言-【管理用户&权限控制】 (语法语句&案例演示&可cv案例代码)
【MySQL-10】DCL-数据控制语言-【管理用户&权限控制】 (语法语句&案例演示&可cv案例代码)
【MySQL-10】DCL-数据控制语言-【管理用户&权限控制】 (语法语句&案例演示&可cv案例代码)
|
9天前
|
SQL 关系型数据库 MySQL
【MySQL-7】DML的表操作详解:添加数据&修改数据&删除数据(可cv例题语句)
【MySQL-7】DML的表操作详解:添加数据&修改数据&删除数据(可cv例题语句)
|
分布式计算 关系型数据库 MySQL
E-Mapreduce如何处理RDS的数据
目前网站的一些业务数据存在了数据库中,这些数据往往需要做进一步的分析,如:需要跟一些日志数据关联分析,或者需要进行一些如机器学习的分析。在阿里云上,目前E-Mapreduce可以满足这类进一步分析的需求。
4937 0
|
2天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
12 0
|
9天前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)