超详细的Canal入门,看这篇就够了!
【Linux学习】解决Linux环境下执行脚本时报错:/bin/bash^M: 坏的解释器: 没有那个文件或目录
canal1.1.5 比1.1.4 优化了很多 但是正式版还没发布 可以自己打包使用
对比
1.1.5 默认支持mysql8 mysql8 默认打开binlog 默认支持utf8
1.1.4 默认是mysql8以下 需要手动打开binlog日志 需要手动设置utf8
canal 在window下启动 问题很多 最后是在linux下测试
win下可能会遇到的问题 config not found 由于win下不知道为什么老是去同文件夹下class里找对应的rdb等文件夹 还是不要在win下测试了
如果要在win下测试的话 建议在idea直接启动程序
github下载比较慢 早上应该会好一下
canal下载地址
github 下载比较慢 可以自己下载打包 canal-adapter
canal-deployer 可以在这下载
canal-deployer 1.1.4 跟1.1.5区别不大 可以使用同样的 主要是canal-adapter 有区别
可以下载 也可以下载代码打包生成
克隆代码
git clone https://gitee.com/mirrors/canal.git下载完用idea打开 可以用maven插件 clean package打包
也可以用maven命令打包
如果是打包上传的 解压后需要给启动关闭文件赋权限
打包完在 canal-deployer arget下的canal下 压缩成zip文件 上传到linux服务器 使用 unzip -x 文件名 进行解压
没有unzip命令的 使用 yum install unzip 进行安装 canal-adapter 也是一样
直接启动会报错/bin/bash^M: 坏的解释器: 没有那个文件或目录 报错原因
使用 sed -i \'s/\r$//\' startup.sh stop.sh restart.sh 命令修复 后面adapter 上传也是这样
修改 conf/example/instance.properties
vim conf/example/instance.properties # position info canal.instance.master.address=127.0.0.1:3306 连接的数据库地址 需要跟后面adapter srcDataSource一致 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=canal 连接的数据库用户名 需要跟后面adapter srcDataSource一致 canal.instance.dbPassword=canal 连接的数据库密码 canal.instance.connectionCharset = UTF-8 # enable druid Decrypt database password canal.instance.enableDruid=false使用 startup.sh 启动canal-deployer
canal-adapter 1.1.5 使用canal-adapter目前还没发正式版到了 v1.1.5-alpha-2 版 可以自己下载(下载比较慢) 也可以克隆后自己打包
将文件上传到linux服务器后 文件夹也是一样的 conf bin logs lib plugins
修改conf/application.yml 文件
默认srcDataSource是注释的 我们需要打开 配置的地址跟deployer一致 密码一致
下面的rdb是我们需要同步的方式 这里以 同步到mysql为例 key需要跟conf/rdb 里面的一致 可以设置不同库的相同表
配置同步文件yml 可以复制原来的进行修改
dataSourceKey: defaultDS destination: example groupId: outerAdapterKey: mysql1 concurrent: true dbMapping: database: demo_user 数据库 table: t_user 数据表 targetTable: demo_user.t_user1 需要同步的数据库数据表 targetPk: id: id # mapAll: true targetColumns: 同步的字段 id: wx_id: wx_nickname: roles: avatar_url: create_time: update_time: bonus: etlCondition: "where c_time>={}" commitBatch: 3000 # 批量提交的大小 ## Mirror schema synchronize config #dataSourceKey: defaultDS #destination: example #groupId: g1 #outerAdapterKey: mysql1 #concurrent: true #dbMapping: # mirrorDb: true # database: mytest canal 1.1.4 使用canal-1.1.4 默认不支持 MySQL8
canal需要开启mysql的binlog mysql8 默认支持binlog 以下需要开启
docker 安装的mysql 开启binlog进入容器内部
docker exec -it 容器id(容器名称) /bin/bash登录mysql 查看是否开始binlog 查看编码格式
mysql -uroot -p 密码 # 查看编码 show variables like \'char%\'; # 查看是否开始binlog show variables like \'log_bin\';编辑my.cnf 文件
vim /etc/mysql/my.cnf没有vim命令的进行安装 在容器内安装vim
apt-get update apt-get install vim