补充: 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 ...
随机推荐
- 监控ckeditor内容变化,删除编辑器内图片,ueditor同样适用
let body = document.querySelector("iframe").contentDocument.body; let observer = new Mutat ...
- css样式的介绍
1.什么是css? 简单的来说css就是配合HTML的,HTML主要负责页面的结构,css就像一个美容师,主要负责页面的美化. 2.css的样式 css的样式有三种:行内样式 内部式 外部链接式 ...
- 【Linux命令】centos防火墙使用和配置
目录 firewalld iptables Linux中的防火墙(iptables,firewalld,ip6tables,ebtables).这些软件本身并不具备防火墙功能,他们的作用都是在用户空间 ...
- 【linux】linux 查看物理CPU个数、核数、逻辑CPU个数
①物理cpu数:主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id) cat /proc/cpuinfo| grep "physical id ...
- 安装keepalived OpenSSL is not properly installed on your system. !!!
错误信息: configure: error: !!! OpenSSL is not properly installed on your system. !!! !!! Can not includ ...
- C#上手练习7(方法语句2)
上一篇方法调用赋值封装,这里使用封装后调用,尽量满足开闭原则. 以及静态类的使用. using System; namespace KingTest03 { class Program { int a ...
- vue-品牌管理案例-指令和过滤器
过滤器的基本使用 定义一个过滤器 <div id="app"> <p>{{ msg | msgFormat('疯狂+1', '123') | test }} ...
- 帝国CMS QQ登陆接口插件 适用于所有帝国7.2版本
插件名称:帝国CMS-QQ登录插件 插件作者:帝国CMS官方 插件介绍:帝国CMS系统的QQ登录插件. 官方网站:http://www.phome.net ---------------------- ...
- PHP常量以及基本数据类型
1.常量 1.1用define()函数定义常量 define(常量名,值,[是否区别大小写]) true表示不区分大小写,默认是false 常量名前没有$符 常量名推荐使用大写 1.2.定义 ...
- django6-orm进阶操作
1.创建django环境的脚本 在自定义脚本中操作orm ,但是自定义脚本中不具备django的环境 ###test.py 脚本,引入django的环境即可使用orm操作数据库import os if ...