摘要
System:Centos7.X
JDK Version:1.8
Es Version:6.5.4
Canal Version:
# 一:概述
# Canal 介绍
Canal是一个基于MySQL二进制日志的高性能数据同步系统。Canal广泛用于阿里巴巴集团,以提供可靠的低延迟增量数据管道 Canal server能够解析MySQL binlog并订阅数据更改,而Canal Client可以实现将更改广播到任何地方,例如数据库和Apache Kafka。 它具有以下功能:
- 支持所有平台
- 支持由Prometheus
- 支持通过不同方式解析和订阅MySQL binlog
- 支持高性能,实时数据同步
- Canal Server和Canal Client 都支持HA/Scalability,由Apache Zookeeper提供支持
- Docker支持 缺点: 不支持全量更新,只支持增量更新。
# 运行原理
- Canal模拟MySQL的slave的交互协议,伪装成MySQL slave,并将转发协议发送到MySQL Master服务器。
- MySQL Master接收到存储请求并开始将二进制日志推送到slave(即canal)
- Canal将二进制日志对象解析为自己的数据类型(原始字节流)
# 二:概述
# 创建mysql表
# 在alitest库中创建ccjjltx表
DROP TABLE IF EXISTS `ccjjltx`;
CREATE TABLE `ccjjltx` (
`id` int(11) NOT NULL,
`name` varchar(200) NOT NULL,
`address` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 创建es索引
PUT ccjjltx
{
"mappings": {
"ccjjltxdoc": {
"properties": {
"name": {
"type": "text"
},
"address": {
"type": "text"
}
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 三:名词解释
# Mysql Binlog 日志
主要用于数据库的主从复制与数据恢复。Binlog中记录了数据的增删改查操作,主从复制过程中,主库向从库同步binlog日志,从库对Binlog日志中的事件进行重放,从而实现主从同步。
模式 | 说明 |
---|---|
ROW | 记录每一行数据被修改的情况,但是日志量太大 |
STATEMENT | 记录每一条修改数据的SQL语句,减少了日志量,但是SQL语句使用函数或触发器时容易出现主从不一致 |
MIXED | 结合了ROW和STATEMENT的优点,根据具体执行数据操作的SQL语句选择使用ROW或者STATEMENT记录日志 |
要通过Mysql Binlog将数据同步到ES集群,只能使用ROW模式,因为只有ROW模式才能知道mysql中的数据的修改内容.
# 四:安装部署
# deployer
# 下载
# 本人放在/root/canal/deployer
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
1
2
2
# 解压文件
tar -zxvf canal.deployer-1.1.4.tar.gz
1
# 修改配置
vim conf/example/instance.properties
1
修改如下内容
#position info
canal.instance.master.address=127.0.0.1:3306
#username/password
canal.instance.dbUsername=root
canal.instance.dbPassword=Chencj1212
1
2
3
4
5
2
3
4
5
完整instance.properties内容如下
# 启动deployer
./bin/startup.sh
1
# 查看日志
tail -f logs/canal/canal.log
1
# 关闭deployer
./bin/stop.sh
1
# adapter
# 下载
# 本人放在/root/canal/adapter
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.adapter-1.1.4.tar.gz
1
2
2
# 解压
tar -zvxf canal.adapter-1.1.4.tar.gz
1
# 修改配置
vim conf/application.yml
1
修改如下内容
server.port:canal-adapter端口号
canal.conf.canalServerHost:canal-server的ip地址
canal.conf.srcDataSources.defaultDS.url:数据库地址和同步的库
canal.conf.srcDataSources.defaultDS.username:数据库用户名
canal.conf.srcDataSources.defaultDS.password:数据库密码
canal.conf.canalAdapters.groups.outerAdapters.hosts:es主机地址,tcp端口
1
2
3
4
5
6
2
3
4
5
6
完整application.yml内容如下
# 新增配置
在conf/es下,新增一个es.yml(名字可随意)
内容如下
destination: example
groupId:
esMapping:
_index: ccjjltx
_type: ccjjltxdoc
_id: _id
upsert: true
sql: "select a.id as _id,a.name,a.address from ccjjltx a"
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 启动adapter
./bin/startup.sh
1
# 查看日志
tail -f logs/adapter/adapter.log
1
# 启动adapter
./bin/startup.sh
1
# 查看日志
tail -f logs/adapter/adapter.log
1
# 关闭adapter
./bin/stop.sh
1
# 验证
验证数据
# mysql【仅限于公司内网访问】
ip: 192.168.23.179
port:3306
userName:root
password:Chencj1212
database:alitest
tables:ccjjltx
# kibana【仅限于公司内网访问】
url:192.168.23.177:5601
query:GET ccjjltx/ccjjltxdoc/_search?pretty
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# admin-server
# 下载
本人放在/root/canal/admin
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.adapter-1.1.4.tar.gz
1
# 解压
tar -zvxf canal.adapter-1.1.4.tar.gz
1
# 修改配置
vim conf/application.yml
1
完整内容如下
# 启动admin-server
./bin/startup.sh
1
# 查看日志
tail -f logs/admin.log
1
# 关闭admin-server
./bin/stop.sh
1
# 默认账号密码
账号:admin 密码:123456
# 登录报错
提示字符位数提示,需要修改部分前端代码,定位问题代码
cd /root/canal/admin/conf/public/static/js
grep -r -l "The password can not be less than" ./
1
2
2
修改内容如下示
# 将下面的6替换成1
t.length<6?s(new Error("The password can not be less than 6 digits"))
1
2
2
# 验证
# admin-server【仅限于公司内网访问】
url: 192.168.23.179:8089
userName:admin
password:123456
1
2
3
4
2
3
4