Windows安装canal、canal-adapter同步docker的数据库信息到docker的es

docker的mysql配置(链接)和elasticsearch的配置(链接)详见之前的文章,这里不再赘述。本文主要讲解Windows下面安装canal和canal-adapter,并实现同步docker的数据库信息到docker的es。

一、安装java

已安装的可以跳过此步骤。下载地址:java下载

java

  • 配置java环境变量
    • 新建JAVA_HOME 变量


      JAVA_HOME

      输入:

      变量名:JAVA_HOME
      变量值:电脑上JDK安装的绝对路径
      

      JDK 路径下必须能够看到如下的文件。


      jdk路径
    • 新建/修改 CLASSPATH 变量
      输入
      变量名:CLASSPATH
      变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
      
    • 修改Path 变量
      新建两条路径:
      %JAVA_HOME%\bin
      %JAVA_HOME%\jre\bin
      
Path
  • 检查 打开 cmd,输入 java,出现一连串的指令提示,说明配置成功了:


    java

二、安装配置canal

注意:安装目录不能出现中文

  • 下载地址这里以1.1.5版本为例。建议使用迅雷下载。

    canal

    用压缩软件解压刚刚下载的两个压缩包,然后把解压后的文件放到自己喜欢的目录下。

  • 配置

    • 修改canal/conf/example/instance.properties文件
      instance.properties

      需要改动的项已在图中框出。
canal.instance.master.address=172.16.10.26:3306  #指定要读取binlog的MySQL的IP地址和端口
canal.instance.master.journal.name= #从指定的binlog文件开始读取数据
canal.instance.master.position= #指定偏移量,做过主从复制的应该都理解这两个参数。
                                 #tips:binlog和偏移量也可以不指定,则canal-server会从当前的位置开始读取。我建议不设置
canal.instance.master.timestamp=  #mysql主库链接时起始的binlog的时间戳,默认:无

# username/password
canal.instance.dbUsername=canal #指定连接mysql的用户密码
canal.instance.dbPassword=Aa123456.
canal.instance.connectionCharset = UTF-8 #字符集

# table regex
# mysql 数据解析关注的表,Perl正则表达式.多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 
# 常见例子:
# 1. 所有表:.* or .*\\..*
# 2. canal schema下所有表: canal\\..*
# 3. canal下的以canal打头的表:canal\\.canal.*
# 4. canal schema下的一张表:canal.test1
# 5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
canal.instance.filter.regex=risk.canal,risk.cwx #这个是比较重要的参数,匹配库表白名单,比如我只要test库的user表的增量数据,则这样写 test.user
  • 启动
双击bin目录下的startup.bat
  • 查看 server 日志 日志在canal.deployer-1.1.5目录的logs文件夹下。

  • 修改canal.adapter-1.1.5/conf/application.yml文件。

application.yml
application.yml
  • 新建canal.adapter-1.1.5/conf/es7/canal.yml文件,将下面的内容粘贴进去
dataSourceKey: defaultDS   #指定数据源,这个值和adapter的application.yml文件中配置的srcDataSources值对应。
destination: example       #指定canal-server中配置的某个实例的名字,注意:我们可能配置多个实例,你要清楚的知道每个实例收集的是那些数据,不要瞎搞。
groupId: g1                #组ID,对应application.yml中的canalAdapters/groups/groupId中的值
outerAdapterKey: db1Key    #对应application.yml中的canalAdapters/groups/outerAdapters/name/key中的值
esMapping:                 #ES的mapping(映射)
  _index: canal            #要同步到的ES的索引名称(自定义),需要自己在ES上创建哦!
  #_type: _doc              #ES索引的类型名称(自定义)
  _id: _id                 #ES标示文档的唯一标示,通常对应数据表中的主键ID字段,注意我这里写成的是"_id",有个下划线哦!
  #pk: id                  #如果不需要_id, 则需要指定一个属性为主键属性
  sql: "select t.id as _id, t.name, t.sex, t.age, t.amount, t.email, t.occur_time from canal t" #这里就是数据表中的每个字段到ES索引中叫什么名字的sql映射,注意映射到es中的每个字段都要是唯一的,不能重复。
  #etlCondition: "where t.occur_time>='{0}'"
commitBatch: 3000

mysql-connector-java下载5.1.27版本的jar文件,拷贝到canal-adapter文件夹下的lib文件夹,然后把之前的删掉。

  • 创建表
CREATE TABLE `canal` (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(20) NULL COMMENT '名称',
sex  varchar(2) NULL COMMENT '性别',
age  int NULL COMMENT '年龄',
amount decimal(12,2) NULL COMMENT '资产',
email  varchar(50) NULL COMMENT '邮箱',
occur_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
  • 创建es索引


    创建canal索引
  • 创建mapping


    创建mapping
{
    "properties": {
        "id": {
            "type": "long"
        },
        "name": {
            "type": "text"
        },
        "sex": {
            "type": "text"
        },
        "age": {
            "type": "long"
        },
        "amount": {
            "type": "text"
        },
        "email": {
            "type": "text"
        },
        "occur_time": {
            "type": "date"
        }
    }
}
  • 启动canal-adapter
双击bin目录下的startup.bat
  • 查看 adapter 日志 日志在canal.adapter-1.1.5目录的logs文件夹下。
  • 插入1条数据:
insert into canal(id,name,sex,age,amount,email,occur_time) values(null,'cwx','男',18,100000000,'249299170@qq.com',now());
insert
  • 更新1条数据:
update canal set name='cwx1',sex='女',age=28,amount=200000,email='asdf',occur_time=now() where id=1;
update
  • 删除1条数据:
delete from canal where id=1;
delete
  • 需要同步哪个配置就去运行
curl -X POST 'localhost:8081/etl/es7/db1Key/canal.yml'
全量同步
kibana dev tools 测试

补充

一、如果启动canal-adapter报以下错误

java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource

这个是 druid 包冲突导致的,解决办法如下

  • 下载源码包 下载

    canal源码

  • 解压后,使用IDEA打开,定位到 client-adapter.escore 模块的 pom.xml 的 druid 更新为

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <scope>provided</scope>
</dependency>
pom.xml
  • 更新后,在项目根目录下执行
mvn clean package
  • 然后到 canal-canal-1.1.5/client-adapter/es7x/target下 将打包好的 client-adapter.es7x-1.1.5-jar-with-dependencies.jar 替换掉 canal-adapter/plugin 下原来的,重启 Canal Adapter即可。

二、 如果mvn命令无法使用,可以先安装maven工具 下载

maven

  • 解压maven 放在需要安装的目录
  • 配置环境变量


    maven配置环境变量
maven配置环境变量
  • 在终端输入以下命令,查看是否安装成功
mvn -v
查看maven是否安装成功

本文结束。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容