canal-adapter 同步mysql到es [基于tcp模式]

本文介绍了如何搭建canal环境,包括canal-server、canal-admin和canal-adapter的配置与启动。通过canal-adapter,实现了MySQL数据库的变更同步到Elasticsearch,涉及全量和增量同步的步骤。同时,文章中还提及了遇到的druid类型转换错误问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

canal环境搭建
  1. canal官网下载 https://github.com/alibaba/canal/tags
  2. 分别将三个tar.gz包解压到指定的包下(adapter|admin|deployer)
canal-server
  1. 将自己伪装成mysql的slave节点,来订阅mysql binlog的变更
  2. 配置mysql,开启binlog
log-bin=mysql-bin # 开启 
binlog binlog-format=ROW # 选择 ROW 模式 
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
  1. 配置canal.properties
canal.id = 101
canal.register.ip = 127.0.0.1 
canal.admin.user = admin 
canal.admin.passwd = 6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
# 当前server上部署的instance列表,对应conf目录下创建对应的文件夹,文件copy example中做修改即可
canal.destinations = example,testusers  
  1. 配置example.properties
canal.instance.mysql.slaveId=103  # 不能和mysql的server_id重复
canal.instance.master.address=mysql地址:3306
canal.instance.dbUsername=root
canal.instance.dbPassword=xxxxxx
canal.instance.connectionCharset = UTF-8
canal.instance.filter.regex=canal_manager\..*  # 配置包含数据库和表
canal.instance.filter.black.regex=mysql\\.slave_.*   # 配置不包含数据库和表
canal.mq.topic=xxx
  1. 配置过滤正则表达式说明
    在这里插入图片描述

  2. 启动canal

/bin/star
### 部署 Canal-Adapter 实现与 Elasticsearch 数据同步 为了通过 Docker 部署 Canal-Adapter 并实现 MySQL 表数据与 Elasticsearch同步,以下是详细的配置方法和最佳实践: #### 1. 准备工作 确保 `Dockerfile` 和 `canal.adapter-1.1.6.tar.gz` 压缩包位于同一目录下[^1]。进入目标路径并创建必要的挂载目录用于存储日志和其他文件。 ```bash cd /opt/canal mkdir -p /mydata/canal/logs ``` #### 2. 编写 Dockerfile 编写一个自定义的 Dockerfile 来构建 Canal-Adapter 容器镜像。以下是一个简单的示例: ```dockerfile FROM openjdk:8-jdk-alpine # 设置环境变量 ENV CANAL_HOME=/usr/local/canal \ PATH=$PATH:$CANAL_HOME/bin # 复制解压后的 canal.adapter 文件夹至容器内部 COPY canal.adapter-1.1.6 /usr/local/canal/ # 暴露端口 (默认为 8081) EXPOSE 8081 # 启动脚本 CMD ["sh", "/usr/local/canal/startup.sh"] ``` #### 3. 构建 Docker 镜像 执行以下命令来构建 Canal-Adapter 的 Docker 镜像: ```bash docker build -t canal-adapter . ``` #### 4. 启动 Elasticsearch 容器 如果尚未启动 Elasticsearch 容器,则可以按照如下方式运行它[^2]: ```bash docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx128m" \ -d elasticsearch:7.4.2 ``` 等待一段时间后确认其状态正常,并复制其中的内容到本地指定位置以便后续操作。 #### 5. 启动 Canal-Adapter 容器 使用之前构建好的镜像启动一个新的运河适配器实例: ```bash docker run --name canal-adapter \ -v /mydata/canal/logs:/usr/local/canal/logs \ -p 8081:8081 \ --link elasticsearch:elasticsearch \ -d canal-adapter ``` 这里我们利用 `-v` 参数指定了主机上的 `/mydata/canal/logs` 映射到了容器内的对应路径;同时通过 `--link` 将两个服务连接起来方便通信。 #### 6. 测试网络连通性 在实际环境中可能还需要额外检查两者之间的网络状况良好与否。可以通过下面这些工具来进行初步诊断[^5]: ```bash curl http://elasticsearch:9200/_cat/health?v ping elasticsearch wget -qO- http://elasticsearch:9200/ ``` 以上命令分别用来获取集群健康信息、探测延迟以及下载主页资源作为进一步验证手段之一。 #### 7. 查看运行情况 最后一步就是观察整个流程是否顺利完成。具体做法参照官方文档说明部分关于如何判断 adapter 是否成功启动的部分描述[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值