1. 作用:

同步mysql;做拉链表;更新redis

某些情况无法从日志中获取信息,而又无法利用sqoop等ETL工具对数据实时的监控

2. canal的工作原理:

                                                                                                                            

canal的工作原理很简单,就是把自己伪装成slave,假装从master复制数据。

3. mysql的binlog

  MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDLDML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间MySQL的二进制日志是事务安全型的。
一般来说开启二进制日志大概会有1%的性能损耗 。二进制有两个最重要的使用场景:
  其一:MySQL ReplicationMaster端开启binlogMaster把它的二进制日志传递给slaves来达到master-slave数据一致的目的
  其二:自然就是数据恢复了,通过使用mysqlbinlog工具来使恢复数据。
二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。

4. 分类

mysql binlog的格式,是有三种,分别是STATEMENT, MIXED, ROW。在配置文件中可以选择配置binlog_format=row
  它们的区别在于:
statement
  语句级,binlog会记录每次一执行写操作的语句。
  相对row模式节省空间,但是可能产生不一致性,比如update tt set create_date=now()
  如果用binlog日志进行恢复,由于执行时间不同可能产生的数据就不同。
优点: 节省空间;  缺点: 有可能造成数据不一致。
row
  行级, binlog会记录每次操作后每行记录的变化。
  优点:保持数据的绝对一致性。因为不管sql是什么,引用了什么函数,他只记录执行后的效果。  缺点:占用较大空间。
mixed
  statement的升级版,一定程度上解决了,因为一些情况而造成的statement模式不一致问题
  在某些情况下譬如: 当函数中包含 UUID() 时; 包含 AUTO_INCREMENT 字段的表被更新时; 执行 INSERT DELAYED 语句时;  用 UDF 时;会按照 ROW的方式进行处理
  优点:节省空间,同时兼顾了一定的一致性。
  缺点:还有些极个别情况依旧会造成不一致,另外statement和mixed对于需要对binlog的监控的情况都不方便。

5. binlog的开启

在mysql的配置文件(Linux: /etc/my.cnf ,  Windows: \my.ini)下,修改配置

在[mysqld] 区块  设置/添加 log-bin=mysql-bin
这个表示binlog日志的前缀是mysql-bin ,以后生成的日志文件就是 mysql-bin.123456 的文件后面的数字按顺序生成。 每次mysql重启或者到达单个文件大小的阈值时,新生一个文件,按顺序编号。

mysql准备,建议安装mysql 5.6及以上版本

mysql赋予canal权限

  GRANT ALL PRIVILEGES ON *.* TO canal@'%' IDENTIFIED BY 'canal'

  SELECT * FROM mysql.`user`

具体操作如下:

[kris@hadoop101 bin]$ which mysql
/usr/bin/mysql
[kris@hadoop101 bin]$ sudo find / -name my.cnf //mysql的my.cnf文件所在的目录
/usr/my.cnf
sudo vim /usr/my.cnf
  server
-id=1
  log-bin=mysql-
bin
  binlog_format
=row
  binlog-do-db=
gmall [kris@hadoop101 mysql]$ pwd
/var/lib/mysql
重启mysql
[kris@hadoop101 mysql]$ sudo service mysql restart
Shutting down MySQL.... [确定]
Starting MySQL.....
 

  在mysql中:

  CALL init_data('2019-05-04',10,20,10,TRUE)
    可以看到mysql-bin.000001文件大小发生的变化

[kris@hadoop101 mysql]$ ll //sudo ls -l
总用量
-rw-rw---- mysql mysql 3月 : auto.cnf
drwx------ mysql mysql 3月 : azkaban
drwx------ mysql mysql 5月 : gmall
-rw-r----- mysql root 5月 : hadoop101.err
-rw-rw---- mysql mysql 5月 : hadoop101.pid
-rw-rw---- mysql mysql 5月 : ibdata1
-rw-rw---- mysql mysql 5月 : ib_logfile0
-rw-rw---- mysql mysql 3月 : ib_logfile1
drwx------ mysql mysql 4月 : metastore
drwx--x--x mysql mysql 3月 : mysql
-rw-rw---- mysql mysql 5月 : mysql-bin.000001
-rw-rw---- mysql mysql 5月 : mysql-bin.index
srwxrwxrwx mysql mysql 5月 : mysql.sock
drwx------ mysql mysql 3月 : performance_schema
-rw-r--r-- root root 3月 : RPM_UPGRADE_HISTORY
-rw-r--r-- mysql mysql 3月 : RPM_UPGRADE_MARKER-LAST
drwx------ mysql mysql 4月 : sparkmall
drwxr-xr-x mysql mysql 3月 : test

canal的下载路径 https://github.com/alibaba/canal/releases
安装并修改配置:

vim conf/canal.properties
#################################################
canal.id =
canal.ip =
canal.port =
canal.metrics.pull.port =
canal.zkServers =
# flush data to zk
canal.zookeeper.flush.period =
canal.withoutNetty = false
# tcp, kafka, RocketMQ
canal.serverMode = tcp
# flush meta cursor/parse position to file
canal.file.data.dir = ${canal.conf.dir}
canal.file.flush.period =

这个文件是canal的基本通用配置,主要关心一下端口号,不改的话默认就是11111

vim conf/example/instance.properties
instance.properties是针对要追踪的mysql的实例配置

## mysql serverId , v1.0.26+ will autoGen 不能与mysql的server-id重复
canal.instance.mysql.slaveId= # enable gtid use true/false
canal.instance.gtidon=false # position info
canal.instance.master.address=hadoop101: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= # table meta tsdb info
canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb

# username/
password
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
canal.instance.defaultDatabaseName =test
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2
/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ== ...

6. 启动:

[kris@hadoop101 bin]$ ./startup.sh
found canal.pid , Please run stop.sh first ,then startup.sh
[kris@hadoop101 bin]$ rm -rf canal.pid
[kris@hadoop101 bin]$ ./startup.sh
cd to /opt/module/canal/bin for workaround relative path
LOG CONFIGURATION : /opt/module/canal/bin/../conf/logback.xml
canal conf : /opt/module/canal/bin/../conf/canal.properties
CLASSPATH :/opt/module/canal/bin/../conf:/opt/module/canal/bin
...
启动之后jps
CanalLauncher
检查
vim /bigdata/canal/logs/example.log 中是否有报错

补充: canal的更多相关文章

  1. 开源数据同步神器——canal

    前言 如今大型的IT系统中,都会使用分布式的方式,同时会有非常多的中间件,如redis.消息队列.大数据存储等,但是实际核心的数据存储依然是存储在数据库,作为使用最广泛的数据库,如何将mysql的数据 ...

  2. mysql 开源~canal安装解析

    一 简介:今天咱们来聊聊canal的一些东西 二 原理: canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议 mysql ma ...

  3. mysql同步之otter/canal环境搭建完整详细版

    接上一篇mysql 5.7多源复制(用于生产库多主库合并到一个查询从库). 这一篇详细介绍otter/canal环境搭建以及当同步出现异常时如何排查.本文主要参考https://blog.csdn.n ...

  4. 【Canal源码分析】整体架构

    本文详解canal的整体架构. 一.整体架构 说明: server代表一个canal运行实例,对应于一个jvm instance对应于一个数据队列 (1个server对应1..n个instance) ...

  5. 转载:阿里canal实现mysql binlog日志解析同步redis

    from: http://www.cnblogs.com/duanxz/p/5062833.html 背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数 ...

  6. 谈谈对Canal(增量数据订阅与消费)的理解

    概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql(也支持mariaDB). 起源:早期,阿里巴巴B2B公司 ...

  7. 对 Canal (增量数据订阅与消费)的理解

    概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 起源:早期,阿里巴巴B2B公司 ...

  8. 阿里巴巴开源项目: canal 基于mysql数据库binlog的增量订阅&消费

    背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增 量变更,不过从2010年开始,阿里系公司开始逐步的 ...

  9. [转帖]Kubernetes CNI网络最强对比:Flannel、Calico、Canal和Weave

    Kubernetes CNI网络最强对比:Flannel.Calico.Canal和Weave https://blog.csdn.net/RancherLabs/article/details/88 ...

随机推荐

  1. WPF Datagrid 控制 第一行和第一列之间的空白

    原文:WPF Datagrid 控制 第一行和第一列之间的空白 这个位置就是 这里 我们更改 DataGridControltemplate 模板 看树形结构 里面是一个BUtton 功能是全选 能找 ...

  2. sql server 2008清除日志

    先改成简单模式,再清除日志,再改回原来模式 USE [oms20190322]GOALTER DATABASE oms20190322 SET RECOVERY SIMPLE WITH NO_WAIT ...

  3. 实时聊天-websocket与ajax的区别于联系

     Ajax是什么? Ajax,即异步JavaScript和XML,是一种创建交互式网页应用的网页开发技术.通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新,这意味着可以在不重新加载整 ...

  4. IT兄弟连 HTML5教程 了解HTML5的主流应用3

    5  基于HTML5的移动APP开发 不同的操作系统中,需要安装用不同技术开发的APP,移动端的操作系统有很多种,但最主要有两大分支,一种在苹果iOS操作系统中使用Objective-C语言开发APP ...

  5. 持续集成(CI):WEB自动化+Allure+Jenkins定时构建

    一.allure插件安装 pytest可以通过allure集成展示优美的测试报告,同样allure也可以与Jenkins集成,并且Jenkins有构建记录,所以可以看到历史构建曲线图,通过曲线图可以清 ...

  6. 学习 正则表达式 js java c# python 通用

    正则表达式 js java c# python 学习网站 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Globa ...

  7. sql server相邻表记录交换(单双两两交换)

    在博客园的博问中看到了一个这样的提问:一个表中有id和name两个字段,id是连续非空不重复的,想要交换相邻表记录的name值(单双两两交换). 另外,如果最后的单独行没有对应的下一行匹配记录的话,就 ...

  8. Python数据分析揭秘知乎大V的小秘密

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 清风小筑 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  9. overflow-x:scroll失效问题解决

    在移动设备上设置overflow-x:scroll,大部分机型都是展示正常的,在安卓哦5.0系统上,无论怎么样滚动条都不会生效,终于找到了解决办法: display: -webkit-box; // ...

  10. 依赖弹出框lhdaiglog的基于WebUploader批量上传图片

    初始上传界面 //链接添加弹窗 html代码段↓ var msgcontent = ""; msgcontent += '<ul class="linkAddBox ...