监听mysql表内容变化使用canal,canal监听同步指定数据库,所有表
监听mysql表内容变化使⽤canal,canal监听同步指定数据库,
所有表
canal 监听同步指定数据库,所有表
canal 监听同步指定数据库,所有表
因为⼯作需求,需要⽤到数据库同步,⼜从⽹上了⼀些发现都有些问题,所以⾃⼰弄好之后写⼀篇总结,及配置步骤吧
先将 MySQL配置成 bin-log模式
给MySQL配置canal⽤户
芝麻烧饼下载 canal⼯具(在这⾥我⽤的是:canal.deployer-1.1.5-SNAPSHOT)我会把⼯具上传到我的资源(免费的)
配置instance.properties 配置⽂件
编写java api
配置MySQL bin-log模式
关于五一的英语作文先 window+R 唤出 输⼊ services.msc 然后点击确定
到MySQL服务右键属性,到MySQL地址,因为我这配置了默认的my.ini⽂件,没配置应该是⼀个MySQL的地址到⾥⾯的my.ini⽂件承德旅游景点
到my.ini⽂件进⼊
添加配置
log-bin=mysql-bin
binlog-format=ROW
注意server-id之前有没有,没有就添加⼀个
server-id=1 然后保存,在刚才唤出的服务⾥重启MySQL服务
给MySQL配置canal⽤户
CREATE USER canal IDENTIFIED BY ‘canal’;
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘canal’@’%’; FLUSH PRIVILEGES;
4.配置 instance.properties⽂件,注意 红框的⽂件夹名后⾯配置会⽤到
canal.instance.defaultDatabaseName = 你默认监听的数据库
canal. = 正则配置的规则
我这⾥配置的是 data_resource_update_platform 数据库下所有的表
mysql 数据解析关注的表,Perl正则表达式.
多个正则之间以逗号(,)分隔,转义符需要双斜杠(\)
兔子养殖常见例⼦:
所有表:.* or .\…
canal schema下所有表: canal\…*
canal下的以canal打头的表:canal\.canal.*
车险服务
canal schema下的⼀张表:st1
如何修身养性
多个规则组合使⽤:canal\…*,st2 (逗号分隔)
注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解
析sql,所以⽆法准确提取tableName进⾏过滤)
我当时是这块出了问题,⼀直监听的是整个MySQL服务器,不是我配置的数据库
canal instance启动时,默认加载instance.properties的canal.参数,之后会根据conf/canal/meta.dat⽂件filter 值更新过滤规则。当客户端调⽤CanalConnector.subscribe(String filter)⽅法时,instance再次⽤filter参数更新过滤规则。
所以当你只关⼼部分库表更新时,设置了canal.,⼀定不要在客户端调⽤CanalConnector.subscribe(".\…"),不然等于没设置canal.。
如果⼀定要调⽤CanalConnector.subscribe(".\…"),那么可以设置instance.properties的canal.instance.参数添加⿊名单,过滤⾮关注库表。
你需要将 meta.dat ⽂件中的 filter对应的正则 改成 你配置的那⼀个我的是:data_resource_update_platform\…*
然后再启动 bin下⾯的 startup.bat ⽂件

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。