当前位置: 首页 > 科技观察

Canal实现MySQL数据库实时数据同步

时间:2023-03-14 16:08:45 科技观察

简介1.1Canal简介Canal是一个基于MySQL二进制日志的高性能数据同步系统。Canal在阿里巴巴集团(包括https://www.taobao.com)广泛使用,提供可靠的低延迟增量数据管道,github地址:https://github.com/alibaba/canalCana??l服务器可以解析MySQLbinlog并订阅数据变化,CanalClient可以将变化广播到任何地方,比如数据库和ApacheKafka。它具有以下特点:支持所有平台。支持由Prometheus提供支持的细粒度系统监控。支持以不同方式解析和订阅MySQLbinlog,例如通过GTID。支持高性能、实时数据同步。(有关详细信息,请参阅性能)CanalServer和CanalClient均支持HA/Scalability,由ApacheZooKeeper提供支持并由Docker提供支持。缺点:不支持全量更新,只支持增量更新。完整的wiki地址:https://github.com/alibaba/canal/wiki1.2操作原理很简单:Canal模拟MySQLslave的交互协议,伪装成mysqlslave,将转发协议发送给MySQL主服务器。MySQLMaster收到dump请求,开始向slave(即canal)推送二进制日志。Canal将二进制日志对象解析成自己的数据类型(原始字节流)如图:准备工作2.1下载并解压canal-server从github上下载canal-serverrelease版本(本安装文档使用v1.1.4)root@locahost:/#wgethttps://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz解压tar-zxvfcanal.deployer-1.1.4.tar。gz2.2下载并解压canal-adapter从github下载canal-adapterrelease版本(本安装文档使用v1.1.4)root@locahost:/#wgethttps://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.adapter-1.1.4.tar.gz解压tar-zxvfcanal.adapter-1.1.4.tar.gz配置canal-server3.1canal-server配置解压后进入conf文件夹修改canal.properties根据实际需要修改(如果不使用kafka或MQ,默认tcp即可)canal.destinations=prod#指定实例名称并用逗号分隔保存,在prod文件夹下创建conf目录下,保存example文件夹下的nstance.properties复制到and_prodmkdirant_prod#创建文件夹cpexample/nstance.propertiesprod/#复制文件修改nstance.properties配置如下:canal.instance.master.address=127.0.0.1:3306#源Mysql地址canalcanal.instance.dbUsername=canal#源Mysql账号canalcanal.instance.dbPassword=canal#源Mysql密码canal.instance.connectionCharset=UTF-8#与源数据库编码格式一致canal.instance.defaultDatabaseName=test_database#默认监控源数据库3.2canal-serverstartentercanal-serverbindirectorystartcdcanal-server/bin#enterdirectory./startup.sh&#启动后台查看日志,是否启动成功cdcanal-server/logs/ant_prod#进入日志目录,启动成功:2020-06-0917:13:04.956[main]WARNo.s.beans.GenericTypeAwarePropertyDescriptor-正在访问无效的JavaBean属性'connectionCharset'!在实际使用的旁边发现的歧义写入方法[publicvoidcom.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.setConnectionCharset(java.nio.charset.Charset)]:[publicvoidcom.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.setConnectionCharset(java.lang.String)]2020-06-0917:13:04.990[main]INFOc.a.o.c.i.spring.support.PropertyPlaceholderConfigurer-从类路径资源加载属性文件[canal.properties]2020-06-0917:13:04.990[main]INFOc.a.o.c.i.portspringPropertyPlaceholderConfigurer-从类路径资源加载属性文件[ant_prod/instance.properties]2020-06-0917:13:05.305[main]INFOc.a.otter.canal.instance.spring.CanalInstanceWithSpring-startCannalInstancefor1-ant_prod2020-06-0917:13:05.311[main]WARNc.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert--->inittablefilter:^.*\..*$2020-06-0917:13:05.311[main]WARNc.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert--->inittableblackfilter:2020-06-0917:13:05.315[main]INFOc.a.otter.canal.instance.core.AbstractCanalInstance-startsuccessful....2020-06-0917:13:05.422[destination=ant_prod,address=rm-wz99s5v03gso12521.mysql.rds.aliyuncs.com/192.xxxxxx:3306,EventParser]WARNc.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy---->begintofindstartposition,itwillbelongtimeforresetorfirstposition2020-06-0917:13:05.423[destination=ant_prod,address=rm-wz99s5mysql.rds5s5gso.aliyuncs.com/192.xxxxxx:3306,EventParser]WARNc.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy-preparetofindstartpositionjustshowmasterstatus2020-06-0917:13:06.483[destination=ant_prod,address=rm-wz99s5v03gso12521.mysql.rds.aliyuncs.com/192.xxxxxx:3306,EventParser]WARNc.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy---->findstartpositionsuccessfully,EntryPosition[included=false=mysql,jsql-bin.000234,position=6676924,serverId=184376678,gtid=,timestamp=1591693973000]cost:1051ms,然后下一步是binlogdump配置canal-adapter4.1canal-adapter配置由于Mysql是8.0的,需要下载mysql-connector-java-8.0在这里。20.jar,并放入libcmysql-connector-java-8.0.20.jar/canal-adapter/lib/解压后,进入conf文件夹,修改application.ymlserver:port:8089spring:jackson:date-格式:yyyy-MM-ddHH:mm:sstime-zone:GMT+8default-property-inclusion:non_nullcanal.conf:mode:tcp#kafkarocketMQcanalServerHost:127.0.0.1:11111batchSize:500syncBatchSize:1000retries:0timeout:accessKey:secretKey:#sourceMysql地址,账号,密码等srcDataSources:defaultDS:url:jdbc:mysql://localhost:3306/test_database?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername:canalpassword:canal#需要实时同步步骤数据库,如果有多个实例可以区分canalAdapters:-instance:prod#canalinstance,在canal-servergroups:-groupId:g1outerAdapters:-name:rdbkey:mysql1#uniquelymarkedproperties:jdbc.driverClassName中指定实例的名称:com.mysql.jdbc.Driverjdbc.url:jdbc:mysql://localhost:3306/test_database_01?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghaijdbc.username:canaljdbc.password:canal编辑rdb目录下表的映射文件,database/table(多个表创建多个映射文件,文件名对应表名)等等1canal-启动适配器,进入canal-adapter/bin目录启动cdcanal-adapter/bin#进入目录./startup.sh&##后台启动查看日志,是否启动成功cdcanal-adapter/adapter/logs/#进入日志目录tail-fadapter.log#查看日志是否启动成功测试数据库同步update/delete/batchinsert/batchupdate/batchdelete

最新推荐
猜你喜欢