运河的引入和安装
运河简介

Canal是阿里巴巴开发的MySQL binlog的增量订阅和消费组件。
Canal是一个基于MySQL二进制日志的高性能数据同步系统。阿里巴巴集团广泛使用Canal来提供可靠的低延迟增量数据管道。
Canal Server可以解析MySQL Binlog,订阅数据变化,而Canal Client可以将变化广播到任何地方,比如数据库和Apache Kafka。
具有以下特点:
支持所有平台。
支持普罗米修斯支持的细粒度系统监控。
MySQL Binlog可以通过不同的方式进行解析和订阅。
支持高性能和实时数据同步。
Canal服务器和Canal客户端都支持Apache ZooKeeper支持的HA/可伸缩性。
Docker支持。
了解运河
Canal [k'nl],译为水道/管道/沟渠,主要用于提供基于MySQL数据库增量日志分析的增量数据订阅和消费。
早期因为在杭州和美国部署双机房,阿里巴巴有跨机房同步的业务需求,主要通过基于业务触发获取增量变化来实现。从2010年开始,业务逐渐尝试分析数据库日志获取增量变化进行同步,产生了大量数据库的增量订阅和消费业务。
基于日志增量订阅和消费的服务包括:
数据库镜像;
实时数据库备份;
索引构建和实时维护;
服务缓存刷新;
用业务逻辑进行增量数据处理;
目前canal支持的源MySQL版本有5.1.x、5.5.x、5.6.x、5.7.x、8.0.x
操作原理
MySQL主备份复制原则
MySQL master将数据更改写入二进制日志;
MySQL从机将主机的二进制日志事件复制到其中继日志中;

MySQL slave重放中继日志中的事件,并将数据变化反映到自己的数据中;
运河的工作原理
Canal模拟MySQL slave的交互协议,伪装成MySQL slave,向MySQL master发送dump协议;
MySQL master收到转储请求,开始向slave推送二进制日志;
运河解析二进制日志对象;孤儿:2名;文本缩进:0px文本转换:无;寡妇:2名;字间距:0px-WebKit-text-stroke-width:0px;文字-装饰-风格:初始;text-decoration-color:initial " data-from-paste = " 1 " data-diagnose->[mysqld]log-bin = mysqld-bin # Open binlogbinlog-format = ROW # Select ROW mode server _ id = 1 # Configure MySQL replaction,需要定义,不要和canal的slaveId重复。
修改后重启mysql服务。
2.授权canal链接MySQL账号拥有作为MySQL slave的权限,如果已有账号直接授予。
创建由“运河”标识的用户运河;*上的授权选择、复制从属、复制客户端。*到'运河' @ ' % ';-授予*上的所有权限。*到'运河' @ ' % ';刷新权限;
开始
1.下载canal,访问发布页面,选择需要的包下载,比如版本1.0.17。
wget https://github . com/阿里巴巴/canal/releases/download/canal-1 . 0 . 17/canal . deployer-1 . 0 . 17 . tar . gz
解压
mkdir/opt/canal tar-zxvf canal . deployer-$ version . tar . gz-C/opt/canal
解压后进入/opt/canal目录,可以看到如下结构:
3.配置修改
vi配置/示例/实例.属性
# # MySQL serverId canal . instance . MySQL . slave id = 1234 #位置信息,需要更改自己的数据库信息,canal . instance . master . address = 127 . 0 . 0 . 1:3306 canal . instance . master . journal . name = canal . instance . master . position = canal . instance . master。timestamp = # canal . instance . stand by . address = # canal . instance . stand by . journal . name = # canal . instance . stand by . position = # canal . instance . stand by . timestamp = # username/password,需要将自己的数据库信息改为canal . instance . db username = canal . instance . db password = canal . instance . default databasename = canal . instance . connection charset . = UTF-8 # table regex canal . instance . filter . regex =。*..*
canal . instance . connection charset表示数据库的编码方式对应java中的编码类型,如UTF-8、GBK、ISO-8859-1。
如果系统是1 cpu,就需要将canal.instance.parser.parallel设置为false。
开始
sh bin/startup.sh
5.检查服务器日志
vi日志/canal/canal.log
2013-02-05 22:45:27.967[main]INFO com . Alibaba . otter . canal . deployer . canal launcher-# #启动运河服务器2013-02-05 22:45:28.113[main]INFO com . Alibaba . otter . canal . deployer . canal controller-# #启动运河服务器[10 . 1 . 29 . 120:111111]2013-02-05 22:42......

6.检查实例的日志
2013-02-05 22:50:45.636[main]INFO c . a . o . c . I . spring . support . propertyplaceholderconfigure-从类路径资源加载属性文件[canal . properties]2013-02-05 22:50:45.641[main]INFO c . a . o . c . I . spring . support . propertyplaceholderconfigure-从类路径资源加载属性文件[example/instance . properties]2013....
7.关闭
sh bin/停止. sh
至此,canal中的一切都已安装成功。


