canal 踩坑实录---这可能是你看到的最全最简单的canal教程
前排参考文章
超详细的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
canal-deployer 1.1.4 跟1.1.5区别不大 可以使用同样的 主要是canal-adapter 有区别
可以下载 也可以下载代码打包生成
克隆代码
git clone https://gitee.com/mirrors/canal.git
下载完用idea打开 可以用maven插件 clean package打包
也可以用maven命令打包
mvn clean package -DskipTests
如果是打包上传的 解压后需要给启动关闭文件赋权限
打包完在 canal-deployer arget下的canal下 压缩成zip文件 上传到linux服务器 使用 unzip -x 文件名
进行解压
没有unzip命令的 使用 yum install unzip
进行安装 canal-adapter 也是一样
chmod u+x startup.sh stop.sh restart.sh
直接启动会报错/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 里面的一致 可以设置不同库的相同表
vim conf/application.yml
srcDataSources:
defaultDS:
url: jdbc:mysql://192.168.142.131:3306/demo_user?useUnicode=true
username: root
password: 123456
canalAdapters:
- instance: example # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: rdb
key: mysql1
properties:
jdbc.driverClassName: com.mysql.jdbc.Driver
jdbc.url: jdbc:mysql://127.0.0.1:3306/demo_user?useUnicode=true
jdbc.username: root
jdbc.password: 123456
配置同步文件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
报下面错误
Err http://security.debian.org wheezy/updates/main amd64 Packages
Err http://security.debian.org wheezy/updates/main amd64 Packages
Err http://security.debian.org wheezy/updates/main amd64 Packages
Err http://security.debian.org wheezy/updates/main amd64 Packages
Err http://security.debian.org wheezy/updates/main amd64 Packages
使用以下命令替换 后 重新安装vim命令
# 更新apt-get源
mv /etc/apt/sources.list /etc/apt/sources.list.bak && \
echo "deb http://mirrors.aliyun.com/debian stretch main contrib non-free" >/etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/debian stretch main contrib non-free" >>/etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian stretch-updates main contrib non-free" >>/etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/debian stretch-updates main contrib non-free" >>/etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free" >>/etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free" >>/etc/apt/sources.list
添加以下配置
[mysqld]
# 打开binlog
log-bin=mysql-bin
# 选择ROW(行)模式
binlog-format=ROW
# 配置MySQL replaction需要定义,不要和canal的slaveId重复
server_id=1
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
然后重启mysql 容器
docker restart mysql容器
启动服务 配置好相应的文件就可以了
1.1.4 主要是mysql的配置多一些