补充: canal
1. 作用:
同步mysql;做拉链表;更新redis
某些情况无法从日志中获取信息,而又无法利用sqoop等ETL工具对数据实时的监控
2. canal的工作原理:

canal的工作原理很简单,就是把自己伪装成slave,假装从master复制数据。
3. mysql的binlog
MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
一般来说开启二进制日志大概会有1%的性能损耗 。二进制有两个最重要的使用场景:
其一:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给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的更多相关文章
- 开源数据同步神器——canal
前言 如今大型的IT系统中,都会使用分布式的方式,同时会有非常多的中间件,如redis.消息队列.大数据存储等,但是实际核心的数据存储依然是存储在数据库,作为使用最广泛的数据库,如何将mysql的数据 ...
- mysql 开源~canal安装解析
一 简介:今天咱们来聊聊canal的一些东西 二 原理: canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议 mysql ma ...
- mysql同步之otter/canal环境搭建完整详细版
接上一篇mysql 5.7多源复制(用于生产库多主库合并到一个查询从库). 这一篇详细介绍otter/canal环境搭建以及当同步出现异常时如何排查.本文主要参考https://blog.csdn.n ...
- 【Canal源码分析】整体架构
本文详解canal的整体架构. 一.整体架构 说明: server代表一个canal运行实例,对应于一个jvm instance对应于一个数据队列 (1个server对应1..n个instance) ...
- 转载:阿里canal实现mysql binlog日志解析同步redis
from: http://www.cnblogs.com/duanxz/p/5062833.html 背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数 ...
- 谈谈对Canal(增量数据订阅与消费)的理解
概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql(也支持mariaDB). 起源:早期,阿里巴巴B2B公司 ...
- 对 Canal (增量数据订阅与消费)的理解
概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 起源:早期,阿里巴巴B2B公司 ...
- 阿里巴巴开源项目: canal 基于mysql数据库binlog的增量订阅&消费
背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增 量变更,不过从2010年开始,阿里系公司开始逐步的 ...
- [转帖]Kubernetes CNI网络最强对比:Flannel、Calico、Canal和Weave
Kubernetes CNI网络最强对比:Flannel.Calico.Canal和Weave https://blog.csdn.net/RancherLabs/article/details/88 ...
随机推荐
- 2019年最新50道java基础部分面试题(二)
前11题请看上一篇文章 12.静态变量和实例变量的区别? 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加. 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对 ...
- 利用 ROW_NUMBER() OVER ( ORDER BY 进行选择性排序,按不同字段进行排序处理,分页
--就在OVER order by 中用case语句进行判断. IF ( OBJECT_ID('tempdb..#TempTable') IS NOT NULL ) DROP TABLE #TempT ...
- mysql 5.7 创建用户报错ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
如: INSERT INTO user (host, user, authentication_string, select_priv, insert_priv, update_priv) VALUE ...
- GO的执行原理以及GO命令
Go的执行原理以及Go的命令 一.Go的源码文件 Go 的源码文件分类: 如上图,分为三类: 1.命令源码文件: 声明自己属于 main 代码包.包含无参数声明和结果声明的 main 函数. 命令源码 ...
- 死磕 java同步系列之AQS终篇(面试)
问题 (1)AQS的定位? (2)AQS的重要组成部分? (3)AQS运用的设计模式? (4)AQS的总体流程? 简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为 ...
- linux tmux用法
1. 安装工具 Centos : yum install tmux 2. 基本操作 新建会话:tmux new -s session-name 查看会话:tmux ls 进入会话:tmux a -t ...
- Winform中在使用Dock属性设计页面布局控件的顺序导致页面效果不同的问题
场景 在Winform中进行页面设计时,常使用控件的Dock属性来进行布局调整.但是由于设置属性的顺序问题,导致达不到想要的效果. 比如以下两个控件 下面的控件设置的Dock属性是Bottom,即在页 ...
- 常用RGB颜色表 色值
转自:http://blog.sina.com.cn/s/blog_7f422a8901019d8j.html R G B 值 R G B 值 R G B 值 黑色 0 0 0 #0000 ...
- 顺F速运,你被爱加M坑了
- 加密情况 首先我们到顺F官网,下载顺F速运APP,当然,是Android版,毕竟穷. 接下来,得看看怎么用,当然顺便用Wireshark抓包,点那个显眼的立即登录按钮. 使用手机号登录,随便敲敲, ...
- 2_Swift基本数据类型
数字和基本数据类型 模型数据与数字,布尔值和其他基本类型. 逻辑值 struct Bool 一个值类型实例, 取值true或者flase Bool表示Swift中的布尔值.Bool通过使用其中一个布尔 ...