首页 > 数据库 >Canal 过滤/同步 DDL 语句到 MySQL 从库

Canal 过滤/同步 DDL 语句到 MySQL 从库

时间:2022-08-19 21:35:08浏览次数:98  
标签:Canal canal COMMENT binlog DDL instance MySQL NULL tsdb

canal.deploy 配置


vim canal.properties canal.serverMode = tcp

vim example/instance.properties # 只同步 FlinkEtl 数据库的数据 # table regex canal.instance.filter.regex=FlinkEtl\\.tb\\d_\\d # 配置 tsdb ,支持表结构修改 # tsdb 是为预防表结构发生变化,而在 canal 订阅 binlog 时产生问题 # canal使用数据库存储上一次的表结构信息,然后对比两次的表结构,可解决此错误。 # table meta tsdb info canal.instance.tsdb.enable=true canal.instance.tsdb.url=jdbc:mysql://hadoop106:3306/canal_tsdb?useUnicode=true&characterEncoding=UTF-8&useSSL=false canal.instance.tsdb.dbUsername=root canal.instance.tsdb.dbPassword=root # 新增 配置文件 # 因为tsdb默认使用的是h2数据库(java内置数据库)。不增加此配置默认还是使用内置数据库, canal.instance.tsdb.spring.xml = classpath:spring/tsdb/mysql-tsdb.xml

vim instance.properties

#################################################
## mysql serverId , v1.0.26+ will autoGen
# canal.instance.mysql.slaveId=0

# enable gtid use true/false
canal.instance.gtidon=false

# position info
canal.instance.master.address=hadoop106:3306
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=

# tsdb 是为预防表结构发生变化,而在 canal 订阅 binlog 时产生问题
# canal使用数据库存储上一次的表结构信息,然后对比两次的表结构,可解决此错误。
# 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=root
canal.instance.tsdb.dbPassword=root
# 新增 配置文件
# 因为tsdb默认使用的是h2数据库(java内置数据库)。不增加此配置默认还是使用内置数据库,
canal.instance.tsdb.spring.xml = classpath:spring/tsdb/mysql-tsdb.xml
#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=root
canal.instance.dbPassword=root
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==

# table regex
canal.instance.filter.regex=.*\\..*
# table black regex
canal.instance.filter.black.regex=mysql\\.slave_.*
# table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch
# table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch

# mq config
canal.mq.topic=example
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,topic2:mytest2\\..*,.*\\..*
canal.mq.partition=0
# hash partition config
#canal.mq.enableDynamicQueuePartition=false
#canal.mq.partitionsNum=3
#canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#################################################

canal 使用 tsdb 保存保存表结构 meta 的信息变化,本地使用默认使用的 h2db,生产建议使用 mysql.


create database canal_tsdb; use canal_tsdb; CREATE TABLE `meta_snapshot` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `gmt_create` datetime NOT NULL COMMENT '创建时间', `gmt_modified` datetime NOT NULL COMMENT '修改时间', `destination` varchar(128) DEFAULT NULL COMMENT '通道名称', `binlog_file` varchar(64) DEFAULT NULL COMMENT 'binlog文件名', `binlog_offest` bigint(20) DEFAULT NULL COMMENT 'binlog偏移量', `binlog_master_id` varchar(64) DEFAULT NULL COMMENT 'binlog节点id', `binlog_timestamp` bigint(20) DEFAULT NULL COMMENT 'binlog应用的时间戳', `data` longtext COMMENT '表结构数据', `extra` text COMMENT '额外的扩展信息', PRIMARY KEY (`id`), UNIQUE KEY `binlog_file_offest` (`destination`,`binlog_master_id`,`binlog_file`,`binlog_offest`), KEY `destination` (`destination`), KEY `destination_timestamp` (`destination`,`binlog_timestamp`), KEY `gmt_modified` (`gmt_modified`) ) COMMENT='表结构记录表快照表'; CREATE TABLE `meta_history` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `gmt_create` datetime NOT NULL COMMENT '创建时间', `gmt_modified` datetime NOT NULL COMMENT '修改时间', `destination` varchar(128) DEFAULT NULL COMMENT '通道名称', `binlog_file` varchar(64) DEFAULT NULL COMMENT 'binlog文件名', `binlog_offest` bigint(20) DEFAULT NULL COMMENT 'binlog偏移量', `binlog_master_id` varchar(64) DEFAULT NULL COMMENT 'binlog节点id', `binlog_timestamp` bigint(20) DEFAULT NULL COMMENT 'binlog应用的时间戳', `use_schema` varchar(1024) DEFAULT NULL COMMENT '执行sql时对应的schema', `sql_schema` varchar(1024) DEFAULT NULL COMMENT '对应的schema', `sql_table` varchar(1024) DEFAULT NULL COMMENT '对应的table', `sql_text` longtext COMMENT '执行的sql', `sql_type` varchar(256) DEFAULT NULL COMMENT 'sql类型', `extra` text COMMENT '额外的扩展信息', PRIMARY KEY (`id`), UNIQUE KEY `binlog_file_offest` (`destination`,`binlog_master_id`,`binlog_file`,`binlog_offest`), KEY `destination` (`destination`), KEY `destination_timestamp` (`destination`,`binlog_timestamp`), KEY `gmt_modified` (`gmt_modified`) ) COMMENT='表结构变化明细表'; ———————————————— https://blog.csdn.net/wfh45678/article/details/118546668

canal_tsdb 数据库表:
meta_history
meta_snapshot
若 canal 宕机后很久没启动,建议删除 conf/example/meta.dat
然后使用 canal_tsdb 数据库的话,清空这两个表,重启canal即可

vim canal.properties

# table meta tsdb info
canal.instance.tsdb.enable = true
canal.instance.tsdb.dir = ${canal.file.data.dir:../conf}/${canal.instance.destination:}
# canal.instance.tsdb.url = jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;
canal.instance.tsdb.url = jdbc:mysql://hadoop106:3306/canal_tsdb?useUnicode=true&characterEncoding=UTF-8&useSSL=false
canal.instance.tsdb.dbUsername = root
canal.instance.tsdb.dbPassword = root
# dump snapshot interval, default 24 hour
canal.instance.tsdb.snapshot.interval = 24
# purge snapshot expire , default 360 hour(15 days)
canal.instance.tsdb.snapshot.expire = 360
# 报错 com.alibaba.druid.pool.DruidDataSource
# canal.instance.tsdb.spring.xml = classpath:spring/tsdb/h2-tsdb.xml canal.instance.tsdb.spring.xml = classpath:spring/tsdb/mysql-tsdb.xml

 

删除 conf/example下面的 meta.dat 和 h2.mv.db

adapter/bin/stop.sh 
deployer/bin/stop.sh

deployer/bin/startup.sh
adapter/bin/startup.sh

vim deployer/logs/canal/canal.log 
vim adapter/logs/adapter/adapter.log 

 

 Client Adapter配置

conf/application.yml 配置

 

标签:Canal,canal,COMMENT,binlog,DDL,instance,MySQL,NULL,tsdb
From: https://www.cnblogs.com/chang09/p/16603355.html

相关文章

  • 基于StatefulSet控制器运行MySQL一主多从
      基于StatefulSet的mysql主从架构  下载xtrabackup镜像root@deploy:/dockerfile/project/mysql/pv#dockerpullregistry.cn-hangzhou.aliyuncs.com/liangxiaohu......
  • 【2022-08-19】mysql基础知识(六)
    mysql基础知识(六)mysql之视图view什么是视图?视图就是通过查询得到的一张虚拟表,然后保存下来,下次直接进行使用即可。即:将SQL语句的查询结果当做虚拟表保存起来,以后可......
  • mysql MVCC中高水位先的trx_id
    读《mysql45讲》之后的总结 InnoDB为每个事务构造了一个数组,用来保存这个事务启动瞬间,当前正在“活跃”的所有事务ID。“活跃”指的就是,启动了但还没提交数组里面事......
  • mysql
    1.表结构InnoDB和MyISAM的区别这两个在数据目录下对应的数据库子目录会创建一个专门用于描绘表结构的文件,以 表名.frm 为结尾的文件。InnoDB还会创建 表名.ibd文件 存......
  • MySQL日志详解
    一、mysql日志日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、二进制日志、查询日志、慢查询日志、事务日志(redolog......
  • 【三大锁】悲观锁——mysql悲观锁
    一三大常用锁悲观锁你准备去银行取10w了,跟银行提前打个招呼,有个10w现金谁都别动。(一般只限制写-别人不能取那10w但是能查到银行总体余额,某些场景会限制读)乐观......
  • Mysql——常用语法
    这里只记录一些mysql语句,用于代替python进行大量的简单性工作。循环创建语句:delimiter$$#声明存储过程的结束符号为$$createprocedureauto_insert1()#相当于声明......
  • mysql运行sql文件报错[ERR] 2006 - MySQL server has gone away [ERR] -- MySQL dump
    原因:在运行数据库脚本文件时报该错,由于mysql对max_allowed_packect 允许最大的数据包的大小有限制解决方法:1.先查看现在允许的最大包大小,单位(字节) select@@max_allow......
  • MySQL事务与锁
    数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。这些问题的本质都是......
  • MySQL视图、触发器、事务
    一、视图1.什么是视图SQL语句的执行结果是一张虚拟表我们可以基于该表做其他操作如果这张虚拟表需要频繁使用那么为了方便可以将虚拟表保存起来保存起来之后就称之为......